问答

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

作者:admin 2021-05-05 我要评论

例: [{ 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...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

例:

[{
          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);
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • JS如何将数组对象中id相同且存在时间交

    JS如何将数组对象中id相同且存在时间交

  • 第三方登录token不怕被别人拿走冒充登

    第三方登录token不怕被别人拿走冒充登

  • vue + typescript 中报如下警告提示该

    vue + typescript 中报如下警告提示该

  • 关于package.json配置全局变量的问题

    关于package.json配置全局变量的问题

腾讯云代理商
海外云服务器