javascript - 在 js 对象数组中搜索值

标签 javascript arrays mutual-exclusion

我需要将新对象推送到对象数组中并检查:新对象是否不与起始值和结束值存在的对象重叠。我写这个。我可以把它缩短吗?或者也许有更好的方法来做到这一点?

let arr = [
    {
        start: 0,
        end: 10
    },
    {
        start: 30,
        end: 40
    },
    {
        start: 60,
        end: 70
    },
    {
        start: 100,
        end: 110
    },
    {
        start: 140,
        end: 150
    },
    {
        start: 180,
        end: 190
    }
];

let objToPush = {
    start: 45,
    end: 50
}

if (!arr.find(o => objToPush.start > o.start && objToPush.start < o.end)) {
    if (!arr.find(o => objToPush.end > o.start && objToPush.end < o.end)) {
        console.log('push');
        arr.push(objToPush);
    } else {
        console.log('not push');
    }
} else {
    console.log('not push');
}

最佳答案

Ashish 击中要害,重叠比较太棒了!

对于任何快速需要它的人:

const overlaps = (obj1, obj2) => (
  obj1.start < obj2.end && obj1.end > obj2.start
);

const overlapExists = (arr, newObj) => (
  arr.some(obj => overlaps(obj, newObj))
);

这是假设:

  1. 所有对象的开始值都小于或等于其结束值。
  2. 相同的值不应视为重叠。

关于javascript - 在 js 对象数组中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902639/

相关文章:

java - 从 android 中的 EditText 字段创建数组

javascript - 匹配字符串中存在的定义标签

operating-system - 带测试和集合的有界等待互斥

process - proctype "-end-"中未达到自旋

synchronization - 使用 TestAndSet() 指令进行互斥

javascript - 使用按钮 onclick 时不显示警报

javascript - 如何在 jQuery 中对特定事件顺序应用函数?

java - 识别字符数组中的特殊字符

javascript - 如何使用 onkeyup 将输入类型 ="url"中的 URL 加载到 iframe src 中?

javascript - GruntJS 链表