Javascript 如何按对象键/值对js数组中的对象进行排序
我有一个包含许多对象的数组。我试图根据每个对象的键值对数组进行排序 因此,对象看起来像这样:Javascript 如何按对象键/值对js数组中的对象进行排序,javascript,Javascript,我有一个包含许多对象的数组。我试图根据每个对象的键值对数组进行排序 因此,对象看起来像这样: 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: '19
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)
所以,我有momentjs,可以将日期更改为一种时间格式,这种格式很容易
已排序,但sorted
console.log显示的是未定义的
老实说,我甚至不知道排序函数是如何工作的。至少它应该从循环中返回
age
,因此console.log()
不应该是空的forEach
不用于排序,也不用于更改数组。对于排序,您应该使用
sort
函数通过成对比较元素对数组进行排序。你需要给它一个函数来“比较”两个元素。“compare”函数接受两个参数a
和b
,如果ab
,则应返回负数
因此,以下代码可能有效:
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()
})
另外请注意,您给出的第四个日期-
1997-17-01T14:57:41.000Z
,是无效的,因为月份数必须小于13。forEach
不用于排序,也不用于更改数组。对于排序,您应该使用
sort
函数通过成对比较元素对数组进行排序。你需要给它一个函数来“比较”两个元素。“compare”函数接受两个参数a
和b
,如果ab
,则应返回负数
因此,以下代码可能有效:
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()
})
另外请注意,您给出的第四个日期-
1997-17-01T14:57:41.000Z
,是无效的,因为月份数必须小于13。请尝试以下操作:
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());
})
尝试以下方法:
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());
})
对于未定义的每个返回,map将返回一个新的数组。您可以为本机
排序编写自己的比较器,或者使用类似lodash
:\uTby(info,['name','age')
--forEach返回未定义,map将返回一个新数组。您可以为nativesort
编写自己的比较器,或者使用类似于lodash
:.sortBy(info,['name',age'])
--1997-17-01T14:57:41.000Z
以YYYY-DD-MM
格式有效,这是非常不标准和意外的…>新日期('1997-17-01T14:57:41.000Z')=>无效日期
看起来至少chrome不支持这一点。我知道,这是JavaScript中的无效日期。然而,OP正在尝试将其解析为moment.js中的YYYY-DD-MM日期。它本身是有效的,但它违反了标准,因为YYYY-AA-BB
应该始终是YYYY-MM-DD
,这在ISO 8601中是标准化的。@Xufox Oh…Good point-Moment.js实际上支持这一点吗?我还没有查过,但我有一种感觉,这将导致不明显的错误。1997-17-01T14:57:41.000Z
在YYYY-DD-MM
格式中有效,这是非常不标准和意外的…>新日期('1997-17-01T14:57:41.000Z')=>无效日期
看起来至少chrome不支持这一点。我知道,在JavaScript中,这是一个无效日期。然而,OP正在尝试将其解析为moment.js中的YYYY-DD-MM日期。它本身是有效的,但它违反了标准,因为YYYY-AA-BB
应该始终是YYYY-MM-DD
,这在ISO 8601中是标准化的。@Xufox Oh…Good point-Moment.js实际上支持这一点吗?我还没有查过,但我有一种感觉,这将导致不明显的错误。等一下……语法,甚至括号都是一样的。太巧了。等等……语法,甚至括号都是一样的。真是巧合。