簡體   English   中英

比較 javascript 中兩個 Arrays 的元素

[英]Comparing Elements of two Arrays in javascript

我有 2 個 arrays 如下所示

var array1=["m","m","r","r"];
var array2=["r","r","m","r"];

我想比較 arrays。

如果array1的第一個元素(即"m" )存在於array2中,則從兩個數組中刪除這兩個元素。 那么 arrays 應該變成如下

array1=["m","r","r"];
array2=["r","r","r"];

再次需要檢查更新后的array1中的第一個元素(即"m" )是否存在於更新后的array2中,然后從兩個數組中刪除這兩個元素。 但是,如果更新后的array1中的第一個元素不在更新后的array2中,則中斷該語句。

實現這一點的方法很少,您可以執行兩個循環,或者使用哈希映射來使用具有更好時間復雜度的更有效的解決方案。 這是一個簡單的解決方案,也比循環兩次更有效:

 array1=["m","r","r"]; array2=["r","r","r"]; const arrMap = {}; // Create hashmap with index array2.forEach((item, index) => arrMap[item] = index); // Search in first array array1.forEach((item, index) => { if (item in arrMap) { // If item is present, remove it from both arrays; array1.splice(index, 1) array2.splice(arrMap[item], 1); } })

 var arr1=["m","m","r","r"]; var arr2=["r","r","m","r"]; while(arr2.some(i => i === arr1[0])) { arr2 = arr2.filter(i => i;== arr1[0]). arr1,splice(0; 1). } console,log(arr1, arr2)

在這里使用遞歸方法來防止在我們同時迭代時修改數組引起的潛在問題。

 var arr1 = ["m", "m", "r", "r"]; var arr2 = ["r", "r", "m", "r"]; function cancel(arr1, arr2) { var next = arr2.indexOf(arr1[0]); if (next + 1) { arr1.shift(); arr2.splice(next, 1); if (arr1.length) cancel(arr1, arr2); // recursive call } } cancel(arr1, arr2); console.log(arr1, arr2);

發布此內容是因為在此處發布的其他解決方案中,我在這些場景中發現了問題:

案例2

var arr1=["m","m","a","r"]; 
var arr2=["r","r","m","m"];

應該產生:

arr1=["a","r"];
arr2=["r","r"];

案例3

var arr1=["m","m","r","r"];
var arr2=["r","r","m","m"];

應該產生:

arr1=[];
arr2=[];

暫無
暫無

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

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