Вот мое собственное решение для курса freeCodeCamp Intermediate Algorithm Scription, задача состоит в том, чтобы сравнить два массива.

Инструкция

Полная инструкция выглядит так:

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

Итак, что мы имеем в самом начале — это пустая функция diffArray с двумя аргументами: arr1, arr2:

function diffArray(arr1, arr2) {
 var newArr = [];
 
 return newArr;
}
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);

Также ребята подсказали нам несколько полезных ссылок из документации:

Решение

Первое, что мы сделаем — объединим два массива в один:

var newArr = arr1.concat(arr2);
// newArr = [1, 2, 3, 5, 1, 2, 3, 4, 5];

Теперь мы будем фильтровать объединенные newArr, удаляя неодиночные значения. Как это сделать — я использовал сравнение двух индексов: первого и последнего (спасибо за методы indexOf и lastIndexOf).

function diffArray(arr1, arr2) {
  // our variable with two array's content
  var newArr = arr1.concat(arr2); // [1, 2, 3, 5, 1, 2, 3, 4, 5];
  
  return newArr.filter(function(item){
    // here we add two indexes
    var first = newArr.indexOf(item);
    var last = newArr.lastIndexOf(item);
    /*
   if they are same - we allow filter return this values 
   newArr = [1, 2, 3, 5, 1, 2, 3, 4, 5];
   iteration 1  2  3  4  5  6  7  8  9
    item   = 1  2  3  5  1  2  3  4  5
    first  = 0  1  2  3  0  1  2  7  3
    last   = 4  5  6  8  4  5  6  7  8
    returt   0  0  0  0  0  0  0  1  0
    */
    return first === last;
  });
  
}
//and the result will be:
diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); => [4]

И чистый код выглядит так:

function diffArray(arr1, arr2) {
  var newArr = arr1.concat(arr2);
  return newArr.filter(function(item){
    return newArr.indexOf(item) === newArr.lastIndexOf(item);
  });
}

Спасибо за чтение.