使用值对对象属性进行排序

时间:2017-03-07 19:28:39

标签: javascript jquery

我有一个像这样的对象:

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])
    {

    }
  }
}

还有其他方法吗?

2 个答案:

答案 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; }