我正在使用JS数组
var fruits = [['5','7'],['10','20'],['20','30']];
function myFunction() {
// want to check Here
fruits.push(['30', '40']); // allow
fruits.push(['7', '10']); // allow
fruits.push(['10', '12']); // Should not allow
fruits.push(['5', '35']); // Should not allow
}
我想检查并允许数组中的元素。
答案 0 :(得分:4)
对于未分类的数据,您可以检查每个边框,如果没有重叠,则按array
。
function push(array) {
return fruits.every(function(a) {
return array[1] <= a[0] || a[1] <= array[0];
}) && fruits.push(array) && true;
}
var fruits = [[10, 15], [25, 30]];
console.log(push([5, 35])); // false
console.log(push([30, 40])); // true
console.log(push([15, 25])); // true
console.log(push([5, 10])); // true
console.log(fruits);
答案 1 :(得分:1)
我建议走这条路:
class IntervalList {
constructor() {
this.data = [];
}
add(low, high) {
if (low > high) {
[low, high] = [high, low];
}
for (let [x,y] of this.data) {
if (x < low) {
if (y > low) return false;
} else if (x > low) {
if (x < high) return false;
}
}
this.data.push([low, high]);
return true;
}
}
然后你会说
之类的话let c = new IntervalList();
c.add(10, 20);
c.add(20, 30);
c.add(5,7);
c.add(3,5);
c.add(9,7)
让数据结构保持自己。
请注意,您想要做的事情很棘手。有些人可能错误地认为你要检查是否(p,q)重叠(r,s)你只需检查p是否在r和s之间或q是否在r和s之间。这不是真的。因为如果值被排列为“p r s q”,那么算法就会失败。注意上面的算法看起来很奇怪,但它会照顾这种情况。这就是问题很有趣的原因。