[英]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.