我看到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的答案返回它们的值。
答案 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();