我需要将新对象推送到对象数组中并检查:新对象是否不与起始值和结束值存在的对象重叠。我写这个。我可以把它缩短吗?或者也许有更好的方法来做到这一点?
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))
);
这是假设:
- 所有对象的
开始
值都小于或等于其结束
值。 - 相同的值不应视为重叠。
关于javascript - 在 js 对象数组中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902639/