[英]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.