如何按年龄值对数据排序?
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 }
*/
答案 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)