我有一个具有几个键值对的对象数组,我需要根据'updated_at'对它们进行排序:
[
{
"updated_at" : "2012-01-01T06:25:24Z",
"foo" : "bar"
},
{
"updated_at" : "2012-01-09T11:25:13Z",
"foo" : "bar"
},
{
"updated_at" : "2012-01-05T04:13:24Z",
"foo" : "bar"
}
]
最有效的方法是什么?
我面对同样的事情,所以我用一个通用的为什么处理这个,我为此建立了一个函数:
/ / example:
/ /阵列:[姓名:’idan’workerType:(3))、姓名:’stas’workerType: 5),姓名:’kirill’,workerType: (2))]
/ / keyField:’workerType’
// keysArray:[“4”、“3”、“2”、“5”、“6”]
sortByArrayOfKeys = (array, keyField, keysArray) => {
array.sort((a, b) => {
const aIndex = keysArray.indexOf(a[keyField])
const bIndex = keysArray.indexOf(b[keyField])
if (aIndex < bIndex) return -1;
if (aIndex > bIndex) return 1;
return 0;
})
}
正如这个答案所示,你可以使用Array.sort。
arr.sort(函数(a,b){返回新的日期(a.updated_at) -新的日期(b.updated_at)})
Arr = [
{
"updated_at": "2012-01-01 t6:25:24 z ",
"foo": "bar"
},
{
"updated_at": "2012-01-09T11:25:13Z",
"foo": "bar"
},
{
"updated_at": "2012-01-05T04:13:24Z",
"foo": "bar"
}
];
arr.sort(函数(a,b){返回新的日期(a.updated_at) -新的日期(b.updated_at)});
console.log (arr);
使用array .sort()对数组进行排序
克隆数组使用展开运算符(…)使函数纯
按所需键排序(updated_at)
将日期字符串转换为日期对象
Array.sort()的工作原理是,如果current项和next项是一个可以执行无节奏操作的数字/对象,则从current项和next项中减去两个属性
const input = [
{
updated_at: '2012-01-01T06:25:24Z',
foo: 'bar',
},
{
updated_at: '2012-01-09T11:25:13Z',
foo: 'bar',
},
{
updated_at: '2012-01-05T04:13:24Z',
foo: 'bar',
}
];
const sortByUpdatedAt = (items) => [...items].sort((itemA, itemB) => new Date(itemA.updated_at) - new Date(itemB.updated_at));
const output = sortByUpdatedAt(input);
console.log(input);
/*
[ { updated_at: '2012-01-01T06:25:24Z', foo: 'bar' },
{ updated_at: '2012-01-09T11:25:13Z', foo: 'bar' },
{ updated_at: '2012-01-05T04:13:24Z', foo: 'bar' } ]
*/
console.log(output)
/*
[ { updated_at: '2012-01-01T06:25:24Z', foo: 'bar' },
{ updated_at: '2012-01-05T04:13:24Z', foo: 'bar' },
{ updated_at: '2012-01-09T11:25:13Z', foo: 'bar' } ]
*/