JavaScript遍历2D数组并返回不匹配项

JavaScript遍历2D数组并返回不匹配项,javascript,arrays,multidimensional-array,2d,Javascript,Arrays,Multidimensional Array,2d,我有两个2D数组,我想使用JavaScript比较它们,忽略匹配,如果存在不匹配,则将整行返回到一个新数组中 var array1 = [ ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], [null,'ABC']

我有两个2D数组,我想使用JavaScript比较它们,忽略匹配,如果存在不匹配,则将整行返回到一个新数组中

    var array1 = [ ['52a1fd0296fc','DEF'],
                 ['52a1fd0296fc','DEF'],
                 ['52a1fd0296fc','DEF'],
                 ['52a1fd0296fc','DEF'],
                 [null,'ABC'],
                 ['6f93cfa0106f','xxx'],
                  ];

    var array2 = [ ['52a1fd0296fc','ABC'],
                   ['6f93cfa0106f','xxx'],
                   ['52a1fd0296fc','ABC'],
                   ['52a1fd0296fc','ABC'],
                   ['52a1fd0296fc','DEF'],
                   ['52a1fd0296fcasd','DEF'],  ];
我要获取此输出,即存在于array2中而不存在于array1中的阵列:

array3 = [['52a1fd0296fcasd','DEF'],['52a1fd0296fc','ABC']]

有什么想法吗?

只需在两个阵列上循环:

var array1=[[52a1fd0296fc','DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[null,'ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'];
变量array2=[[52a1fd0296fc','ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'],
[52a1fd0296fc',ABC'],
[52a1fd0296fc',DEF'];
var array3=[];

对于(var i=0;i仅在两个数组上循环:

var array1=[[52a1fd0296fc','DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[null,'ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'];
变量array2=[[52a1fd0296fc','ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'],
[52a1fd0296fc',ABC'],
[52a1fd0296fc',DEF'];
var array3=[];

对于(var i=0;i您可以使用数组的连接值作为键,并过滤第二个数组中的一个,同时指示已插入的项

var array1=['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、[null、'ABC']、['6f93cfa0106f'、'xxx'],
阵列2=['52a1fd0296fc'、'ABC']、['6f93cfa0106f'、'xxx']、['52a1fd0296fc'、'ABC']、['52a1fd0296fc'、'ABC']、['52a1fd0296fc'、'DEF']、['52a1fd0296fcasd'、'DEF'],
hash=Object.create(null),
结果;
数组1.forEach(函数(a){
hash[a.join('|')]=true;
});
结果=阵列2.过滤器(函数(a){
return!hash[a.join('|')]&&(hash[a.join('|')]=true);
});

console.log(result);
您可以使用数组的连接值作为键,并过滤第二个数组中的一个,同时指示已插入的项

var array1=['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、['52a1fd0296fc'、'DEF']、[null、'ABC']、['6f93cfa0106f'、'xxx'],
阵列2=['52a1fd0296fc'、'ABC']、['6f93cfa0106f'、'xxx']、['52a1fd0296fc'、'ABC']、['52a1fd0296fc'、'ABC']、['52a1fd0296fc'、'DEF']、['52a1fd0296fcasd'、'DEF'],
hash=Object.create(null),
结果;
数组1.forEach(函数(a){
hash[a.join('|')]=true;
});
结果=阵列2.过滤器(函数(a){
return!hash[a.join('|')]&&(hash[a.join('|')]=true);
});

console.log(result);
这是我的做法,可能更紧凑(并且使用ES6)

此代码从主数组中删除重复的数组

var array1=[[52a1fd0296fc','DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[null,'ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'];
让数组3=[]
数组1.forEach(a1=>{
如果(!array3.find(a2=>a2[0]==a1[0]&&a2[1]==a1[1])数组3.push(a1)
})

log(array3)
这是我的做法,可能更紧凑(并且使用ES6)

此代码从主数组中删除重复的数组

var array1=[[52a1fd0296fc','DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[52a1fd0296fc',DEF'],
[null,'ABC'],
[6f93cfa0106f',xxx'],
[52a1fd0296fc',ABC'];
让数组3=[]
数组1.forEach(a1=>{
如果(!array3.find(a2=>a2[0]==a1[0]&&a2[1]==a1[1])数组3.push(a1)
})


console.log(array3)
预期的输出是什么?什么是不匹配?预期的输出是一个具有唯一值的新2D数组。array3=[[null,'ABC']]我想检查以下语句:if(array1[0]==array2[0]&&if array1[1]==array2[1])什么唯一值?“52a1fd0296fc”或“ABC”?或唯一数组?请澄清并准确地告诉我们您期望的输出。期望的输出是什么?什么是不匹配?期望的输出是一个具有唯一值的新2D数组。array3=[[null,'ABC']]我想检查以下语句:if(array1[0]==array2[0]&&if array1[1]==array2[1])什么唯一值?“52a1fd0296fc”?或“ABC”?或唯一数组?请澄清并准确地告诉我们您期望的输出。运行此命令只会输出
[[null,“ABC”]]
,这不是预期的输出。OP想要删除主阵列。这正是OP的第一条注释答案的结果。你是对的,但OP当时非常不清楚,请查看他们的最后一条注释。@JeremyThille,我在最后一条答案中看不到任何规则。有没有规则?我编辑了我的示例。希望这有助于理解我想要实现的目标Anni这只是输出
[[null,“ABC”]]
,这不是预期的输出。OP想要删除主阵列。这正是OP的第一条注释答案的结果。你是对的,但OP当时非常不清楚,请查看他们的最后一条注释。@JeremyThille,我在最后一条答案中看不到任何规则。有没有规则?我编辑了我的示例。希望这有助于理解我想要实现的目标但是
Array.find
方法比使用
find=true
布尔值编写循环更优雅。根据Mozilla的规范,
Array.find
与IE和Opera不兼容。它可以工作,但是
Array.find
方法比使用
find=true
布尔值编写循环更优雅。根据Mozilla的规格为,
数组。find
与IE和Opera不兼容。