Как найти разницу значений в двух двумерных массивах?
arr1 = [[35,70],[433,70],[35,73],[433,73],[35,154],[433,154]]
arr2 = [[433,70],[433,154],[433,73],[35,154],[1,2,3]]
В результате должно быть:
res = [[35,70],[35,73]]
Мой код:
var arr1 = [[35,70],[433,70],[35,73],[433,73],[35,154],[433,154]];
var arr2 = [[433,70],[433,154],[433,73],[35,154],[1,2,3]];
var res = [];
for (var i = 0; i < arr2.length; i++)
{
res.push(arr1.splice(arr1.indexOf(arr2[i]), 1));
}
console.log(res);//нужно [[35,70],[35,73]]
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
Странно, что у вас не получилось с JSON.stringify
arr1 = [[35,70],[433,70],[35,73],[433,73],[35,154],[433,154]]
arr2 = [[433,70],[433,154],[433,73],[35,154],[1,2,3]]
arr1 = arr1.map(function(x) { return JSON.stringify(x) })
arr2 = arr2.map(function(x) { return JSON.stringify(x) })
function diffTest(x) {
for(var i=0; i < arr2.length; i++) {
if (arr2[i] === x) return false;
}
return true;
}
diff = arr1.filter(diffTest).map(function(x) { return JSON.parse(x) }) // [ [ 35, 70 ], [ 35, 73 ] ]
Можно и массивы сравнивать в цикле, без json
var arr1 = [[35,70],[433,70],[35,73],[433,73],[35,154],[433,154]];
var arr2 = [[433,70],[433,154],[433,73],[35,154],[1,2,3]];
function AnotB(a, b) {
var diff = [], elA, elB, i, j, found;
loopA: for (i = 0; i < a.length; i++) {
elA = a[i];
found = false;
loopB: for (j = 0; j < b.length; j++) {
elB = b[j];
if( elA.length !== elB.length) continue loopB;
for( k = 0; k < elA.length; k++) {
if( elA[k] !== elB[k]) continue loopB;
}
found = true;
break loopB;
}
if(!found) diff.push(elA);
}
return diff;
}
AnotB(arr1, arr2); // [[35,70],[35,73]]
Спасибо всем за ответы я так же сделал свой вариант:
var arr1 = [[35,70],[433,70],[35,73],[433,73],[35,154],[433,154]]
var arr2 = [[433,70],[433,154],[433,73],[35,154]]
for (var i = 0; i < arr1.length; i++)
{
if(!isItemInArray(arr2,arr1[i])==true){
console.log(arr1[i]);
}
}
function isItemInArray(array, item) {
for (var i = 0; i < array.length; i++) {
if (array[i][0] == item[0] && array[i][1] == item[1]) {
return true;
}
}
return false;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости