JavaScript 陣列交集
-
在 JavaScript 中使用
_.intersection()
方法查詢陣列交集 -
在 JavaScript 中使用
filter()
與indexOf()
和includes()
方法查詢陣列交集 -
在 JavaScript 中使用 Set 的
has()
方法查詢陣列交集 - 在 JavaScript 中使用 jQuery 查詢陣列交集
在本教程中,我們將重點關注 JavaScript 陣列交集。尋找兩個陣列之間的交集意味著尋找 arrayA
和 arrayB
中的共同元素。
為了通過程式設計做到這一點,我們同時使用 _.intersection()
函式、filter()
和 indexOf()
方法、同時使用 filter()
和 includes()
以及 has()
帶有 includes()
函式的 set
方法。
我們也可以通過使用 jQuery 來實現這個目標。讓我們一步一步來。
在 JavaScript 中使用 _.intersection()
方法查詢陣列交集
_.intersection()
是 JavaScript 的 Underscore
庫中的一個函式,它從傳遞的陣列中返回共同值的陣列。使用這個函式的好處是傳遞了兩個以上的陣列。
你可以深入瞭解 Underscore
庫此處的詳細資訊。
確保在 <head>
標記中包含 Ununderscore
庫。
示例程式碼:
let results = _.intersection([2, 3, 4, 5, 6], [3, 4, 6, 2]);
console.log(results);
輸出:
[2, 3, 4, 6]
假設如果我們有字串陣列,_.intersection()
仍然像處理數字陣列並在陣列之間尋找共同元素一樣工作。
請參閱下面給出的示例程式碼。
let results = _.intersection(
['mehvish', 'ashiq', 'martell', 'daniel'],
['daniel', 'raza', 'christopher'], ['ashiq', 'daniel', 'moultrie']);
console.log(results);
輸出:
["daniel"]
如果我們傳遞具有 null
、""
(空字串)、undefined
值的陣列,你認為 _.intersection()
會產生錯誤嗎?不,不是的。
它仍然會嘗試在所有提供的陣列中找到相同的元素。看看下面的程式碼來練習一下。
let results = _.intersection(['null', '', 'undefined', 3], [3, 'null', '']);
console.log(results);
輸出:
["null", "", 3]
在 JavaScript 中使用 filter()
與 indexOf()
和 includes()
方法查詢陣列交集
filter()
函式建立一個全新的陣列,其中包含通過給定函式實現的評估的元素。
indexOf()
方法為我們提供了 a 值第一次出現的位置,如果沒有找到則返回 -1
。
另一方面,includes()
方法確定陣列在其條目中是否具有特定值。它根據輸入返回 true
和 false
。
示例程式碼:
let arrayA = [2, 3, 5, 4, 7, 9];
let arrayB = [2, 9, 4, 7];
const filteredArray = arrayA.filter(value => arrayB.includes(value));
console.log(filteredArray);
輸出:
[2, 4, 7, 9]
示例程式碼:
let arrayA = [2, 3, 5, 4, 7, 9];
let arrayB = [2, 9, 4, 7];
const filteredArray = arrayA.filter(value => arrayB.indexOf(value) !== -1);
console.log(filteredArray);
輸出:
[2, 4, 7, 9]
在 JavaScript 中使用 Set 的 has()
方法查詢陣列交集
includes()
方法查詢陣列中的每個元素,這意味著它的時間複雜度是 O(n)
。
在這裡,has()
方法出現並在恆定時間內返回輸出,也稱為 O(1)
。
我們必須將我們的陣列轉換為 sets
,然後編寫一個 for
迴圈來使用 has()
函式來遵循這種技術。
示例程式碼:
let arrayA = [2, 3, 5, 4, 7, 9];
let arrayB = [2, 9, 4, 7];
// converting into Set
let setA = new Set(arrayA);
let setB = new Set(arrayB);
for (let i of setB) {
if (setA.has(i)) {
console.log(i);
}
}
輸出:
2
9
4
7
如果我們想在單獨的陣列中擁有共同值怎麼辦?我們可以使用 push()
方法插入 commonValues
陣列值。
用下面的程式碼練習學習;你可以在此處找到有關 push()
方法的更多資訊。
let arrayA = [2, 3, 5, 4, 7, 9];
let arrayB = [2, 9, 4, 7];
// converting into Set
let setA = new Set(arrayA);
let setB = new Set(arrayB);
let commonValues = [];
for (let i of setB) {
if (setA.has(i)) {
commonValues.push(i);
}
}
console.log(commonValues);
輸出:
[2, 9, 4, 7]
在 JavaScript 中使用 jQuery 查詢陣列交集
如果你喜歡使用 jQuery,下面的解決方案很好。grep()
函式查詢滿足 filter()
函式的陣列元素。
請記住,原始陣列不受此函式的影響。inArray()
就像 JavaScript indexOf()
方法。
它還搜尋陣列中的值/元素並返回其位置。如果在陣列中未找到值,則 inArray()
返回 -1。
示例程式碼:
let arrayA = [2, 3, 5, 4, 7, 9], arrayB = [2, 9, 4, 7];
$.arrayIntersect = function(arrA, arrB) {
return $.grep(arrA, function(i) {
return $.inArray(i, arrB) > -1;
});
};
console.log($.arrayIntersect(arrayA, arrayB));
輸出:
[2, 4, 7, 9]