當鍵為字串時如何比較兩個陣列 - JavaScript
當鍵為字串時,在 JavaScript 中比較兩個陣列可能會比較棘手。字串比較區分大小寫,需要特殊處理才能確保正確的結果。
幸運的是,在 JavaScript 中,當鍵為字串時,您可以使用幾種方法來比較兩個陣列。在本文中,我們將討論如何使用各種方法(例如 *map()、include()、intersection() 和 Array.filter()*)有效地比較鍵為字串的兩個陣列。
JavaScript 中的 *字串* 用於儲存和修改文字。JavaScript 中的 *字串* 定義為用引號括起來的零個或多個字元。可以表示為文字的資料可以儲存在字串中。使用 *String()* 建構函式,可以將字串建立為基本型別、從字串文字或作為物件。
在 JavaScript 中使用 map()
*Map()* 是 JavaScript 的內建方法,它建立一個新陣列,其中包含在陣列的每個元素上呼叫提供的函式的結果。它可以用於迭代陣列、修改每個專案並將修改後的專案作為新陣列返回。對於空專案,*map()* 不會執行該函式。*map()* 不會影響初始陣列。
語法
以下是 *map()* 的語法
array.map(function(currentValue, index, arr), thisValue)
JavaScript 中的 include()
在 JavaScript 中,*include()* 方法用於確定 *字串* 是否包含另一個子字串。結果以 true 或 false 返回。
語法
以下是 *include()* 的語法
string.includes(searchvalue, start)
示例
在下面的示例中,我們正在執行一個指令碼,以使用 *map()* 和 *include()* 來比較兩個陣列。
<!DOCTYPE html>
<html>
<body>
<script>
const arr1 = [
{ "car": "Bmw"},
{ "car": "BENZ"},
{ "car": "Audi"},
{ "car": "Jaguar"}
];
const arr2 = [
{ "car": "Audi"},
{ "car": "City"},
{ "car": "Jaguar"},
{ "car": "Verna" }
];
const extractValue = ({ 'car': car }) => car;
const duplicateValues = arr1
.map(extractValue)
.filter(x => arr2
.map(extractValue)
.includes(x)
);
document.write(JSON.stringify(duplicateValues));
</script>
</body>
</html>
當指令碼執行時,它將生成一個輸出,其中包含在 Web 瀏覽器上列印的 *陣列*。這是由一個觸發的事件引起的,該事件使這兩個 *陣列* 互相比較並提供新的 *陣列*。
示例
考慮以下示例,我們在此處使用 *intersection*;在這種情況下,它首先查詢最長的 *陣列* 並進行過濾,因此 *最短的陣列* 用作要搜尋的 *陣列*。
<!DOCTYPE html>
<html>
<body>
<script>
const first = [
{ "bike": "Rx100"},
{ "bike": "R15"},
{ "bike": "Revolt"},
{ "bike": "Duke"}
]
const second = [
{ "bike": "Deluxe"},
{ "bike": "Rx100"},
{ "bike": "Splendor"}
]
const intersection = (longer, shorter, key) => {
let tmp;
if (shorter.length > longer.length) {
tmp = shorter, shorter = longer, longer = tmp;
}
const vals = shorter.map(entry => entry[key]);
return longer.filter(entry => vals.find(v => v ===entry[key]));
}
const key = 'bike';
const third = intersection(first, second, key);
document.write(JSON.stringify(third.flatMap(Object.values)));
</script>
</body>
</html>
執行上述指令碼後,輸出視窗將彈出,在 Web 瀏覽器上顯示 *陣列*,這是由於執行指令碼時觸發的事件引起的。
示例
讓我們看下面的例子,我們使用 *Array.filter* 遍歷第一個陣列並返回在第二個陣列中找到的值。
<!DOCTYPE html>
<html>
<body>
<script>
const array1 = [
{ "movie": "Balu"},
{ "movie": "Gabbar"},
{ "movie": "Bheem"},
];
const array2 = [
{ "movie": "Jalsa"},
{ "movie": "Balu"},
];
const array2String = JSON.stringify(array2);
const duplicates = array1.filter(x =>array2String.includes(JSON.stringify(x)));
document.write(JSON.stringify(duplicates))
</script>
</body>
</html>
當指令碼執行時,事件被觸發,該事件比較指令碼中使用的兩個陣列,並在 Web 瀏覽器上返回這兩個陣列之間找到的值。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP