如何按年龄值对数据排序?

时间:2018-08-28 21:08:23

标签: javascript

如何按年龄值对数据排序?

var date = {
    michael : { color : "A", age : 30 },
    peter : { color : "C", age : 10 },
    martin : { color : "D", age : 7 },
    mario : { color : "R", age : 20 },
};

我希望获得以下效果:

/*martin : { color : "D", age : 7 },
    peter : { color : "C", age : 10 },
    mario : { color : "R", age : 20 },
    michael : { color : "A", age : 30 }
*/

2 个答案:

答案 0 :(得分:2)

我认为对象在JavaScript中的工作方式存在误解。对象具有一组属性。每个属性都可以有一个值。

属性没有任何特定顺序。

这样想吧。

let x = {};
x.foo = 'hello';
y.bar = 'whats up?';
x.foo = 'world';

按键顺序是什么?瞧,这个问题真的没有道理。

当您像以前那样表达对象文字时,并不表示任何特定的顺序。

var date = {
    michael : { color : "A", age : 30 },
    peter : { color : "C", age : 10 },
    martin : { color : "D", age : 7 },
    mario : { color : "R", age : 20 },
};

相同
date.michael = { color : "A", age : 30 };
date.peter = { color : "C", age : 10 };
date.martin = { color : "D", age : 7 };
date.mario = { color : "R", age : 20 };

也许更简洁地说,源代码中各行的显示顺序并不会真正影响该对象。就像说它有迈克尔和彼得,而不是名单(迈克尔,彼得)。

因此,从字面上看,您要问的是不可能的。您无法对对象的键进行排序,因为它们没有任何顺序。就像在整理汽车。

现在,如果这是一个对象数组,并且每个对象都有一个名为name的属性,这将很容易。为什么?数组有顺序。根据定义,数组是值的有序列表。

var people = [
    { name: "michael", color : "A", age : 30 },
    { name: "peter", color : "C", age : 10 },
    { name: "martin", color : "D", age : 7 },
    { name: "mario", color : "R", age : 20 },
];

people.sort((a, b) => b.age - a.age);

将导致

[
    { name: "martin", color : "D", age : 7 },
    { name: "peter", color : "C", age : 10 },
    { name: "mario", color : "R", age : 20 },
    { name: "michael", color : "A", age : 30 },
]

有关Array.prototype.sort的详细文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

答案 1 :(得分:0)

这是正确的答案:

var date = {
    michael : { color : "A", age : 30 },
    peter : { color : "C", age : 10 },
    martin : { color : "D", age : 7 },
    mario : { color : "R", age : 20 },
};


var sortedDataByAge = Object.keys(date)
.map(e => ({name:e, ...date[e]}))
.sort((a,b) => a.age - b.age)

console.log(sortedDataByAge)