我有一个像这样的对象:
json_result = {X: 0.42498, A: 0.34891, B: 0.38408, C: 0.22523}
我想按值的降序对上述内容进行排序,即
json_result = {X: 0.42498, B: 0.38408, A: 0.34891, C: 0.22523}
我想的是:
for ( key in json_result)
{
for ( value1 in json_result[key])
{
for (value2 in json_result[key])
{
}
}
}
还有其他方法吗?
答案 0 :(得分:3)
如评论中所述,无法保证对象键顺序,因此排序对象没有多大意义。您应该使用数组作为结果。
var json_result = {X: 0.42498, A: 0.34891, B: 0.38408, C: 0.22523};
function sort(obj) {
return Object.keys(obj).sort(function(a, b) {
return obj[b] - obj[a];
});
}
var sorted = sort(json_result);
console.log('sorted keys', sorted);
console.log('key lookup', sorted.map(function(key) {
return json_result[key]
}));
console.log('sorted objects', sorted.map(function(key) {
return {[key]: json_result[key]}
}));
答案 1 :(得分:2)
您不能“排序”对象的键,因为它们没有已定义的顺序。将对象视为键值对的集,而不是它们的列表。
但是,您可以将JSON转换为键值对的排序列表(数组),从而产生如下所示的对象:
[ ['X', 0.42498], ['B', 0.38408], ['A', 0.34891], ['C', 0.22523] ]
var result = {X: 0.42498, A: 0.34891, B: 0.38408, C: 0.22523}
var sorted = Object.keys(result).map(function (key) {
return [key, this[key]]
}, result).sort(function (a, b) {
return b[1] - a[1]
})
console.log(sorted)
.as-console-wrapper { min-height: 100vh; }