【问题标题】:_.sortBy object key value for d3 chart_.sortBy d3 图表的对象键值
【发布时间】:2015-01-14 18:20:08
【问题描述】:

我知道您不应该对 javascript 对象进行排序,但我需要对 d3 图表进行排序。我有一个对象,其键为 FICO 分数范围和该范围内的计数值

var counts = {680-700: 30, 620-640: 41, 640-660: 24, 660-680: 10}

我需要返回一个排序后的对象,使最低值的键排在第一位。

var desired_obj = { 620-640: 41, 640-660: 24, 660-680: 10, 680-700: 30  }

我尝试使用 _.sortBy 但它只返回值

 _.sortBy(counts, function(val, key) { return val })

【问题讨论】:

  • 发布您的图表制作代码:您在哪里需要排序字典? JavaScript 对象没有顺序,因此对其进行排序是没有意义的。
  • counts 不能是数组有什么原因吗?例如[{range: '680-700', count: 30}, {range: '620-640', count: 41}, {range: '640-660', count: 24}, {range: '660-680', count: 10}]
  • @shawnb 不,那很好
  • @shawnb 知道了。感谢您为我指明正确的方向。我用var map = _.map(counts, function(val, key) { return {label: key, value: val } )然后排序_.sortBy(map, function(x) { return x.label.split("-")[0] })

标签: javascript d3.js underscore.js


【解决方案1】:

正如 cmets 中所讨论的,JavaScript 对象在键中显式性没有顺序。 (来源:https://stackoverflow.com/a/5525820/1007263

如果您需要确保顺序,则必须将对象转换为数组。 您可以使用下划线轻松做到这一点:

a = {a:1, b:3, c:2}
_.map(a, function(value, key) { return {key: key, value: value} })
// [{"key":"a","value":1},{"key":"b","value":3},{"key":"c","value":2}]

并且可以在映射后使用链式排序:

_.chain(a).map(function(value, key) { return {key: key, value: value} }).sortBy('value').value()
//"[{"key":"a","value":1},{"key":"c","value":2},{"key":"b","value":3}]"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-08-12
    • 1970-01-01
    • 2021-12-05
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多