我有一个包含两种不同类型对象的数组,每个对象都有自己的日期字段,其中键不同。见下文:
const array = [
{ id: 1, occurs_at: '2017-02-03T07:00:01.000Z' },
{ id: 2, occurs_at: '2017-02-03T10:00:01.000Z' },
{ id: 3, start: '2017-02-03T04:00:01.000Z' },
{ id: 4, start: '2017-02-03T06:00:01.000Z' },
];
我试图按升序排列它们,但我似乎无法找到解决方案。我一直在使用Lodash进行基于单个属性的其他排序。有什么想法吗?
答案 0 :(得分:5)
您可以测试所需属性,并仅使用具有真实值的属性。
Tc
var array = [{ id: 1, occurs_at: '2017-02-03T07:00:01.000Z' }, { id: 2, occurs_at: '2017-02-03T10:00:01.000Z' }, { id: 3, start: '2017-02-03T04:00:01.000Z' }, { id: 4, start: '2017-02-03T06:00:01.000Z' }];
array.sort(function (a, b) {
return (a.occurs_at || a.start).localeCompare(b.occurs_at || b.start);
});
console.log(array);
答案 1 :(得分:0)
const sorted = _.sortBy(array, i => new Date(
_(i)
.pick(['occurs_at', 'start'])
.values()
.first()
));
如果您知道每个集合项目将具有occurs_at
或start
属性作为日期字符串,则可以使用pick()
来获取这两者。显然只存在一个,所以这将返回一个具有正确值的对象。
此时,您不再关心密钥,因为您知道它是一个具有单个日期值的对象。因此,您可以使用values()和first()来获取它。
答案 2 :(得分:-3)
array.sort(function(a, b) {
return new Date(b.occurs_at) - new Date(a.occurs_at);
});