首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出两个多维数组之间的差异

找出两个多维数组之间的差异
EN

Stack Overflow用户
提问于 2020-07-29 01:22:39
回答 2查看 52关注 0票数 0

我在找出两个多维数组之间的差异时遇到了一些麻烦。

以下是数组:

代码语言:javascript
复制
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"]]

我希望结果是两个数组中都不存在的标签的二维数组,所以在本例中:

代码语言:javascript
复制
resultArr = [["testingTag","TES"],["tag-6","TES"]]

我已经能够成功地检索到数组中匹配的所有标记。

然后,我尝试使用所有匹配的标签遍历arr2,如果循环中的标签与arr2i中的标签不匹配,则将其推入数组,在推入数组之前,我将检查标签是否也已存在于正在推送的数组中,如果存在,则将其从数组中删除。但是我在这里解释的逻辑没有起作用,它只会让我更困惑。

我刚才尝试解释的逻辑的代码:

代码语言:javascript
复制
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)
                    }
                }
            }
        }
    }

有没有一种更简单、更有效的方法来找出两个多维数组之间的差异?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-29 01:33:02

假设有一些字符(例如'_')不能出现在字符串中,您可以将您的问题转换为处理字符串数组,例如,如下所示:(我没有压缩代码,以保持一定的可读性)

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-07-29 01:30:06

您可以将一个对象作为键/值对,并通过检查存储的值与实际值来过滤第二个数组。

代码语言:javascript
复制
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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63139573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档