从Javascript对象排序键

时间:2016-05-28 21:57:50

标签: javascript arrays json d3.js

我看到this topic和答案,但它似乎对我不起作用。我尝试了对象和排序中的值的alll变体,但它似乎不起作用。我想得到一个在对象的键(而不是它们的值)上排序的列表(在这个例子中,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的答案返回它们的值。

3 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

您只需使用 var list = Object.keys(test).sort();

即可