簡體   English   中英

推送元素時檢查數組元素

[英]Check Array Element When Push Element

我正在使用JS Array

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
}

我想檢查並允許數組中的元素。

對於未排序的數據,如果沒有發生重疊,則可以檢查每個邊框並推送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); 

我建議走這條路:

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之間即可。 這不是真的。 因為如果將值排列為“ prsq”,該算法將失敗。 注意上面的算法看起來很奇怪,但是可以解決這種情況。 這就是為什么這個問題很有趣的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM