从Javascript对象排序键

从Javascript对象排序键,javascript,arrays,json,d3.js,Javascript,Arrays,Json,D3.js,我看到了答案,但似乎对我不起作用。我尝试了对象和排序中所有值的变体,但似乎不起作用。我希望得到一个按对象中键(而不是键的值)排序的列表(在本例中,2个对象在json中): d3.json: { "TEST1": {"purchase": ["yes", 2], "safety": ["no", 3], "quality": ["Carried by the husk", 1], "name": ["Eggs!", 0]}, "TEST2": {"purchase": "yes", "

我看到了答案,但似乎对我不起作用。我尝试了对象和排序中所有值的变体,但似乎不起作用。我希望得到一个按对象中键(而不是键的值)排序的列表(在本例中,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的答案相同。

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

  var list = Object.keys(test).sort(function(a,b){ return a.localeCompare(b) })
这是默认的排序顺序,因此:

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

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

  var list = Object.keys(test).sort(function(a,b){ return a.localeCompare(b) })
这是默认的排序顺序,因此:

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

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

您只需使用

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

尝试以下方法:

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

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

预期结果是什么?好问题,我编辑:)预期结果是什么?好问题,我编辑:)谢谢!特别是对于解释期望的结果:)最终需要一个额外的步骤(从(对于根中的键)开始,您的代码只对根中的对象进行排序,而不是对根[key]中的对象进行排序),我可以省略排序函数(如Aromator所述):对于(根中的键){var sortedByKeys=Object.key(根[key]).sort()。reduce(函数(prev,curr){prev[curr]=root[key][curr];return-prev;},{};console.log(sortedByKeys);}谢谢!特别是为了解释所需的结果:)最终需要额外的步骤(从(对于root中的key)开始,代码只对root中的对象进行排序,而不是对root[key]中的对象进行排序)我可以省略排序函数(如Aromator所述):for(根中的键){var sortedByKeys=Object.keys(根[key]).sort().reduce(函数(prev,curr){prev[curr]=root[key][curr];return prev;},{};console.log(sortedByKeys);}