У меня два 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 и NOT в array1:
array3 = [['52a1fd0296fcasd','DEF'],['52a1fd0296fc','ABC']]
Любая идея, пожалуйста?
Вы можете использовать объединенные значения массива в качестве ключа и отфильтровать один раз из второго массива, указав уже вставленные элементы.
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)
Просто обведите оба массива:
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, а не наоборот.
[ [ null, "ABC" ] ]
, это не ожидаемый результат. ОП хочет дедуплицировать основной массив