Найти разницу между двумя массивами (Javascript алгоритм) + фанк использование оператора Spread - PullRequest
0 голосов
/ 27 апреля 2020

Вопрос

Сравните два массива и верните новый массив с любыми элементами, найденными только в одном из двух указанных массивов, но не в обоих. Другими словами, вернуть симметричную c разницу двух массивов.

Примечание. Вы можете вернуть массив с его элементами в любом порядке.

Ответ профессионального разработчика

function diffArray(arr1, arr2) {
  return [...diff(arr1, arr2), ...diff(arr2, arr1)];

  function diff(a, b) {
    return a.filter(item => b.indexOf(item) === -1);
  }
}

Мой вопрос

Я не понимаю, как работает этот код. В частности, я никогда не видел, чтобы оператор распространения использовался таким образом. Не могли бы вы объяснить, как это работает?

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Это просто причудливый способ объединить два массива вместе. Вот как это выглядит, если вы не использовали оператор распространения

function diffArray(arr1, arr2) {
  function diff(a, b) {
    return a.filter(item => b.indexOf(item) === -1);
  }

  var diff1 = diff(arr1, arr2)   // [0, 1]
  var diff2 = diff(arr2, arr1)   // [5, 6]
  return [].concat(diff1, diff2) // [0, 1, 5, 6]

}

var res = diffArray([0,1,2,3,4], [2,3,4,5,6])
console.log(res)
1 голос
/ 27 апреля 2020

Оператор распространения , используемый в массиве, берет элементы из массива и помещает их непосредственно в структуру данных, которая их содержит. Так что если A = [1,2,3] и B = [4,5,6], то [...A, ...B] === [1,2,3,4,5,6]. Без оператора распространения они были бы [[1,2,3], [4,5,6]].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...