簡體   English   中英

JavaScript迭代2D數組並返回不匹配

[英]JavaScript iterate through 2D array and return the mismatches

我有兩個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'] ]; var array2 = [ ['52a1fd0296fc','ABC'], ['6f93cfa0106f','xxx'], ['52a1fd0296fc','ABC'], ['52a1fd0296fc','ABC'], ['52a1fd0296fc','DEF'] ]; var array3 = []; for(var i = 0; i<array1.length; ++i) { var a = array1[i]; var found = false; for(var j = 0; j<array2.length; ++j) { var b = array2[j]; if(a[0] == b[0] && a[1] == b[1]) { found = true; break; } } if(!found) { array3.push(a); } } console.dir(array3); 

我假設你想要array1而不是array2,而不是相反。

您可以使用數組的連接值作為鍵,並過濾第二個數組的一次,同時指示已插入的項。

 var array1 = [ ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], ['52a1fd0296fc','DEF'], [null,'ABC'], ['6f93cfa0106f','xxx']], array2 = [ ['52a1fd0296fc','ABC'], ['6f93cfa0106f','xxx'], ['52a1fd0296fc','ABC'], ['52a1fd0296fc','ABC'], ['52a1fd0296fc','DEF'], ['52a1fd0296fcasd','DEF']], hash = Object.create(null), result; array1.forEach(function (a) { hash[a.join('|')] = true; }); result = array2.filter(function (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'] ]; let array3 = [] array1.forEach( a1 => { if(!array3.find(a2 => a2[0]===a1[0] && a2[1]===a1[1])) array3.push(a1) }) console.log(array3) 

暫無
暫無

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

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