繁体   English   中英

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

[英]How can I sort data by age values?

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

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 }
*/

我认为对对象在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 };

简而言之,源代码中各行的显示顺序并不会真正影响该对象。 这就像说它有michael和peter,而不是清单(michael,peter)。

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

现在,如果这是一个对象数组,并且每个对象都有一个名为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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

这是正确的答案:

 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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM