Получение разницы между массивами

Решаю задачи с codewars. Необходимо получить разницу массивов а - b. В первом случае не отрабатывает filter с данными ниже аргументами.

function arrayDiff(a, b) {
    let arr = [];
  for (let i = 0; i < b.length; i++){
    arr = a.filter(item => item !== b[i]);
  }  
  return arr;
  }

console.log(arrayDiff([1, 2, 2], []));

Во втором случае со splice.

function arrayDiff(a, b) {
    let arr = [];
    for (let i = 0; i < a.length; i++) {
      for (let j = 0; j < b.length; j++){
        if (a[i] == b[j]) {
            a.splice(i, 1);
        }     
      }
    }
    return a;    
  }
 
 console.log(arrayDiff([1, 2, 2], [2]));

Хорошо что есть тесты, но уже крыша едет)) Помогите решить, пожалуйста!


Ответы (1 шт):

Автор решения: Alexandr

В первом случае вы запускаете цикл, и на каждой итерации перезаписываете результат отработки фильтра, в итоге получаете значение с последней итерации. Во втором вы почему то хотите вернуть переменную 'a', но по вашему коду предполагаю, что хотите вырезать переменную и вставить ее в массив arr, который задекларировали ранее?

Вот измененное решение вашего первого варианта

function arrayDiff(a, b) {
    let arr = a;
  for (let i = 0; i < b.length; i++){
    arr = arr.filter(item => item !== b[i]);
  }  
  return arr;
  }

console.log(arrayDiff([1, 2, 2], []));

→ Ссылка