Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-按两个日期属性对对象数组排序_Javascript_Arrays_Lodash - Fatal编程技术网

Javascript-按两个日期属性对对象数组排序

Javascript-按两个日期属性对对象数组排序,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有一个数组,它包含两种不同类型的对象,每个对象都有自己的日期字段,其中键是不同的。见下文: 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

我有一个数组,它包含两种不同类型的对象,每个对象都有自己的日期字段,其中键是不同的。见下文:

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进行基于单个属性的其他排序。有什么想法吗?

您可以测试想要的属性,只使用具有真实值的属性

var数组=[{id:1,出现在:'2017-02-03T07:00:01.000Z'},{id:2,出现在:'2017-02-03T10:00:01.000Z'},{id:3,开始:'2017-02-03T04:00:01.000Z'},{id:4,开始:'2017-02-03T06:00:01.000Z'};
array.sort(函数(a,b){
return(a.ocurses|u在| a.start);localeCompare(b.ocurses|u在| b.start);
});
console.log(数组)
.as控制台包装{max height:100%!important;top:0;}
我会使用和:

如果您知道每个集合项将在
处有一个
ocurses\u或一个作为日期字符串的
start
属性,则可以使用
pick()
来获取这两个属性。显然只有一个存在,因此这将返回一个具有正确值的对象


此时,您不再关心键,因为您知道它是一个具有单个日期值的对象。因此,您可以使用和来获取它。

有没有办法知道它将是哪个键?是否有两个以上不同的日期键?或者“occurs_at”和“start”是仅有的两个可能的日期键?除了日期和id之外,对象还有更多的键吗?开始和发生时间是日期唯一可能的键吗?@baao正确。这些将是唯一可能的关键。请在问题中编辑其他详细信息。评论是我们要求澄清的。然后尼娜回答了你的问题…:-)
array.sort(function(a, b) {
    return new Date(b.occurs_at) - new Date(a.occurs_at);
});
const sorted = _.sortBy(array, i => new Date(
  _(i)
    .pick(['occurs_at', 'start'])
    .values()
    .first()
));