【问题标题】:ordering keys from Javascript object从 Javascript 对象排序键
【发布时间】:2016-05-28 21:57:49
【问题描述】:

我看到了this topic 和答案,但它似乎对我不起作用。我尝试了对象和排序中值的所有变体,但它似乎不起作用。我想获得一个按对象中的键(而不是它们的值)排序的列表(在本例中,2 个对象在 json 中):

d3.json:

{
"TEST1":    {"purchase": ["yes", 2], "safety": ["no", 3], "quality": ["Carried by the husk", 1], "name": ["Eggs!", 0]},
"TEST2":    {"purchase": "yes", "safety": "no", "quality": "Carried by the husk", "name": "0"}

}

还有 JavaScript:

d3.json("d3.json", function(root) {

  for (key in root) {
      console.log(root[key]);
      var test = root[key];
      var list = Object.keys(test).sort(function(a,b){ return test[a]-test[b] })
      console.log(list);
  }
});

编辑:抱歉,我不清楚预期的结果:我正在寻找排序的键,但返回它们的值作为 dlopez 的答案。

【问题讨论】:

  • 预期结果是什么?
  • 好问题,我编辑了:)

标签: javascript arrays json d3.js


【解决方案1】:

试试这个:

var sortedByKeys = Object.keys(root)
    .sort(function(a,b) { return a - b; })
    .reduce(function(prev, curr) {
        prev[curr] = root[curr];
        return prev;
    }, {});

【讨论】:

  • 谢谢!特别是为了解释所需的结果:)最终需要一个额外的步骤(从(对于根中的键)开始,您的代码只对根中的对象进行排序,而不是对根[键]中的对象进行排序),我可以省略排序函数(如aromatt所述): for (key in root) { var sortedByKeys = Object.keys(root[key]) .sort() .reduce(function(prev, curr) { prev[curr] = root [key][curr];返回上一个;},{}); console.log(sortedByKeys); }
【解决方案2】:

你可以简单地使用 var list = Object.keys(test).sort();

【讨论】:

    【解决方案3】:

    通过在排序回调函数中使用test[a] - test[b],您可以按属性值而不是键进行排序。要按键排序,您可以使用:

      var list = Object.keys(test).sort(function(a,b){ return a.localeCompare(b) })
    

    这是默认的排序顺序,所以:

      var list = Object.keys(test).sort()
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多