如何通过对象键/值对js数组中的对象进行排序

时间:2017-09-29 16:51:27

标签: javascript

我有一个包含许多对象的数组。我试图根据每个对象的键值对数组进行排序。

所以,对象看起来像这样:

Window

我正在尝试将新的(已排序的)数据保存到名为var info = [ {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, {name: 'Jane', age: '1997-17-01T14:57:41.000Z'} ]; 的变量中;

sorted

所以,我有时间,将日期更改为可以轻松实现的时间格式  已排序,但 var sorted = info.forEach(function(person) { var age = moment(String(person.age)).format('MM/DD/YYYY'); return age }, this); console.log(sorted) console.log显示sorted

老实说,我甚至不知道排序功能是如何工作的。至少它应该从循环中返回undefined,因此age不应该是空的

2 个答案:

答案 0 :(得分:2)

forEach不用于排序,也不用于更改数组。对于排序,您应该使用sort

sort函数通过成对比较元素来对数组进行排序。你需要给它一个能够比较&#34;两个要素。 &#34;比较&#34;函数接受两个参数ab,如果a<b则返回负数,如果它们相同则返回0,如果{{1}则返回正数}。

因此,以下代码可能有效:

a>b

另请注意,您提供的第四个日期 - var info = [ {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, {name: 'Jane', age: '1997-12-01T14:57:41.000Z'} ]; info.sort(function (a, b) { return (new Date(a.age)).getTime() - (new Date(b.age)).getTime() }) 无效,因为月份数必须少于13个。

答案 1 :(得分:0)

尝试这个:

var arrayOfObject = [ 
    {name: 'Adam', age: '1987-01-09T18:23:20.000Z'}, 
    {name: 'Issac', age: '1988-09-02T11:17:11.000Z'}, 
    {name: 'Tom', age: '2003-08-07T13:07:03.000Z'}, 
    {name: 'Jane', age: '1997-12-01T14:57:41.000Z'} 
];

arrayOfObject.sort(function (a, b) {
    return ((new Date(a.age)).getTime() - (new Date(b.age)).getTime());
})