Сравнить 2 массива и вывести несовпадающие значения

269
05 января 2018, 00:57

есть 2 массива типа:

let arr1 = [[1000046748,    130.06],  
[1000046749,    85.2],
[1000046750,    4.5]];
let arr2 = [[1000046748,    130.06],
[1000046750,    4.5],
[1000046751,    58.82]];

нужно отдельно получить разницу между первым и вторым и наоборот. Вложеность массивов большая, как сделать это оптимально?

Answer 1

let arr1 = [ [1000046748, 130.06], [1000046749, 85.2], [1000046750, 4.5] ]; 
let arr2 = [ [1000046748, 130.06], [1000046750, 4.5],  [1000046751, 58.82] ]; 
 
let lookup1 = arr1.reduce(function(result, item){  
  result[item[0] + "_" + item[1]] = item; 
  return result; 
}, {}); 
let lookup2 = arr2.reduce(function(result, item){  
  result[item[0] + "_" + item[1]] = item; 
  return result; 
}, {}); 
 
let diff12 = []; 
for (let key in lookup1) { 
  if (!lookup2[key]) 
    diff12.push(lookup1[key]); 
} 
let diff21 = []; 
for (let key in lookup2) { 
  if (!lookup1[key]) 
    diff21.push(lookup2[key]); 
} 
 
console.log(diff12); 
console.log(diff21);

Доработать, если в любом из массивов возможны одинаковые элементы.

READ ALSO
Помогите решить простую задачу

Помогите решить простую задачу

Нужно написать код который посчитает сколько 9 в числеНапример дано число 929, должно вывести 2

244
webpack: Module not found

webpack: Module not found

ЗдравствуйтеТолько соприкоснулась с webpack и не совсем удачно :) Установила webpack через npm:

282
Chrome не показывает содержимое файла с ошибкой. А FF показывает. Как сделать, чтобы в Chrome тоже можно было увидеть?

Chrome не показывает содержимое файла с ошибкой. А FF показывает. Как сделать, чтобы в Chrome тоже можно было увидеть?

В консоле выводится, что у меня на такой-то строке есть ошибкаЯ щелкаю по этой надписи справа - чтобы перейти к строке с ошибкой

236
Что означают в js скрипте цифры 0x4a7a06, 0x4838cf …?

Что означают в js скрипте цифры 0x4a7a06, 0x4838cf …?

Что означают в js скрипте цифры 0x4a7a06, 0x4838cf

283