推送元素时检查数组元素

时间:2016-12-01 07:58:15

标签: javascript arrays compare

我正在使用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
}

我想检查并允许数组中的元素。

2 个答案:

答案 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”,那么算法就会失败。注意上面的算法看起来很奇怪,但它会照顾这种情况。这就是问题很有趣的原因。