Как найти разницу значений в двух двумерных массивах?

318
26 ноября 2017, 16:10

Как найти разницу значений в двух двумерных массивах?

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>

Answer 1

Странно, что у вас не получилось с 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

Answer 2
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]]
Answer 3

Спасибо всем за ответы я так же сделал свой вариант:

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>

READ ALSO
Открыть новую ссылку в текущие вкладке puppeteer

Открыть новую ссылку в текущие вкладке puppeteer

Как открыть новую ссылку в текущие вкладке puppeteerУ меня алгоритм такой: открываю ссылку -> логин и пароль -> вхожу

416
Преобразовать полное ФИО в сокращённое

Преобразовать полное ФИО в сокращённое

Как можно преобразовать полное ФИО в краткое?

327
задний фон(body) не покрывает всю страницу на IOS

задний фон(body) не покрывает всю страницу на IOS

Я создал простую страницу используя css flexbox layoutВсе работает хорошо с Android телефонами,а вот на Iphone,при скроле,появляется разрыв,к которому применяется...

293