簡體   English   中英

查找2個多維arrays之間的差異

[英]Find the differences between 2 multidimensional arrays

我在弄清楚如何找到 2 個多維 arrays 之間的差異時遇到了一些麻煩。

這些是 arrays:

let arr1 = [["Tag2","TES"],["Tag3","TES"],["Fedex Ground","TES"],["Fedex Air","TES"],["AMER","TES"],["CA BC","TES"],["EMEA","TES"],["Express","TES"],["tag-5","TES"]]

let arr2 = [["Tag2","TES"],["Tag3","TES"],["Fedex Ground","TES"],["Fedex Air","TES"],["AMER","TES"],["CA BC","TES"],["EMEA","TES"],["testingTag","TES"],["Express","TES"],["tag-5","TES"], ["tag-6", "TES"]]

我希望結果是 arrays 中都不存在的標簽的二維數組,所以在這種情況下:

resultArr = [["testingTag","TES"],["tag-6","TES"]]

我已經能夠成功檢索到數組中匹配的所有標簽。

有了這個,然后我嘗試使用所有匹配的標簽循環遍歷 arr2 並在循環中的標簽與 arr2[i] 中的標簽不匹配時推送到數組,然后在推送到數組之前我會檢查標簽是否已經存在於我正在推動的陣列中,如果確實存在,那么我會將其從陣列中刪除。 但是我在這里解釋的邏輯並沒有奏效,它所做的只是讓我更加困惑。

我剛剛嘗試解釋的邏輯代碼:

let existingTags = [], deletedTags = [];

    //Checks which tags are not to be deleted
    for(let i=0; i<newTags.length;i++){
        for(let j=0; j<oldTags.length;j++){
            if(newTags[i][0] == oldTags[j][0]){
                existingTags.push(newTags[i][0])
            }
        }
    }
    
    //Pushes to array the tags to be deleted 
    for(let i=0; i<existingTags.length;i++){
        for(let j=0; j<oldTags.length;j++){
            if(existingTags[i] != oldTags[j][0]){
                deletedTags.push(oldTags[j][0])
            }else{
                for(let k=0; k<deletedTags.length; k++){
                    if(oldTags[j][0] == deletedTags[k]){
                        deletedTags.splice(i,1)
                    }
                }
            }
        }
    }

是否有更簡單、更有效的方法來查找 2 個多維 arrays 之間的差異?

您可以將 object 用於鍵/值對,並通過檢查存儲的值與實際值來過濾第二個數組。

 let array1 = [["Tag2", "TES"], ["Tag3", "TES"], ["Fedex Ground", "TES"], ["Fedex Air", "TES"], ["AMER", "TES"], ["CA BC", "TES"], ["EMEA", "TES"], ["Express", "TES"], ["tag-5", "TES"]], array2 = [["Tag2", "TES"], ["Tag3", "TES"], ["Fedex Ground", "TES"], ["Fedex Air", "TES"], ["AMER", "TES"], ["CA BC", "TES"], ["EMEA", "TES"], ["testingTag", "TES"], ["Express", "TES"], ["tag-5", "TES"], ["tag-6", "TES"]], values = Object.fromEntries(array1), result = array2.filter(([k, v]) => values[k];== v). console;log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

假設有一些字符(例如'_' )不能出現在字符串中,您可以將您的問題轉換為處理字符串的 arrays ,例如如下:(我沒有壓縮代碼,以保持一些可讀性)

set1 = new Set(arr1.map(x => x[0]+'_'+x[1]))
set2 = new Set(arr2.map(x => x[0]+'_'+x[1]))
diff1 = arr1.filter(x => !set2.has(x[0]+'_'+x[1]))
diff2 = arr2.filter(x => !set1.has(x[0]+'_'+x[1]))
res = diff1.concat(diff2)

暫無
暫無

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

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