H5W3
当前位置:H5W3 > 问答 > 正文

JS如何将数组对象中id相同且存在时间交集的元素取出来?

例:

[{
id: 1,
start: '2020-11-20',
end: '2020-11-23',
}, {
id: 2,
start: '2020-11-20',
end: '2020-11-24',
}, {
id: 1,
start: '2020-11-21',
end: '2020-11-25',
}]

如何优雅的取出id相同且存在时间交集的元素?
我目前想到的是都转换成时间戳再一一比对,有没有更优的解法呢?

时间的比较不需要转时间戳,直接比大小就会得true或者false,
时间交集提供一个简单的思路,用第二数据的开始时间和第一个数据的结束时间比大小,如果得到true说明存在区间,false说明不存在

function find (input = []) {
const output = new Set();
Array
.from(input)
.sort(
(m, n) =>
m.id - n.id ||
(m.start < n.end || m.end > n.start) &&
output.add(m) && output.add(n),
);
return Array.from(output);
}

回答

本文地址:H5W3 » JS如何将数组对象中id相同且存在时间交集的元素取出来?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址