我有一个包含许多对象的数组。我试图根据每个对象的键值对数组进行排序。
所以,对象看起来像这样:
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
不应该是空的
答案 0 :(得分:2)
forEach
不用于排序,也不用于更改数组。对于排序,您应该使用sort
。
sort
函数通过成对比较元素来对数组进行排序。你需要给它一个能够比较"两个要素。 "比较"函数接受两个参数a
和b
,如果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());
})