JavaScript 陣列交集

Mehvish Ashiq 2023年1月30日 2022年5月5日
  1. 在 JavaScript 中使用 _.intersection() 方法查詢陣列交集
  2. 在 JavaScript 中使用 filter()indexOf()includes() 方法查詢陣列交集
  3. 在 JavaScript 中使用 Set 的 has() 方法查詢陣列交集
  4. 在 JavaScript 中使用 jQuery 查詢陣列交集
JavaScript 陣列交集

在本教程中,我們將重點關注 JavaScript 陣列交集。尋找兩個陣列之間的交集意味著尋找 arrayAarrayB 中的共同元素。

為了通過程式設計做到這一點,我們同時使用 _.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() 方法確定陣列在其條目中是否具有特定值。它根據輸入返回 truefalse

示例程式碼:

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]
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - JavaScript Array