Реализуйте набор готовых к использованию функций для arr.filter:

Реализуйте набор готовых к использованию функций для arr.filter: notInArray([...]) – значение не находится в данном массиве.

Они должны использоваться таким образом: arr.filter(notInArray([1,2,3])) – выбирает только те элементы, которые не совпадают ни с одним из элементов массива

Пример:

let arr = [1, 2, 3, 4, 5, 6, 7, true, undefined, NaN];
console.log(arr.filter(notInArray([1, 2, 3, 4, 5, 6, 7, true]))); // [undefined, NaN]

Мой код:

const notInArray = arr => {
    return function(element, i, array) {
        for (let i = array.length - 1; i >= 0; i--) {
            if (arr.includes(array[i])) {
                array.splice(i, 1);
            }
        }
        return array;
    };
};

Проверку не проходит.


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

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

Исправляем ошибки в вашем коде:

Функции notInArray достаточно вернуть функцию, принимающую один аргумент(это будет текущий элемент фильтруемого массива), остальные не нужны(в данном примере).

В возвращаемой фукнции необходимо делать проверку, сущестует ли текущий элемент массива в массиве исключений. Если существует, вернуть false, иначе true.

const notInArray = arr => elem => !arr.includes(elem);

let arr = [1, 2, 3, 4, 5, 6, 7, true, undefined, NaN];
console.log(arr.filter(notInArray([1, 2, 3, 4, 5, 6, 7, true])))
console.log(arr.filter(notInArray([1, 2, 3, 4, undefined])))
console.log(arr.filter(notInArray([4, 5, 6, 7, NaN])))

Если запись в одну строку сложна, то ниже полное описание функции с трансформацией

const notInArray = arr => elem => !arr.includes(elem);
//
const notInArray = arr => elem => {
  return !arr.includes(elem);
}
//
const notInArray = arr => {
  return elem => {
    return !arr.includes(elem);
  }
}
//
const notInArray = arr => {
  return elem => {
    if (arr.includes(elem)) {
      return false
    } else {
      return true
    }
  }
}
//
const notInArray = arr => {
  return function(elem) {
    if (arr.includes(elem)) {
      return false
    } else {
      return true
    }
  }
}
//
function notInArray(arr) {
  return function(elem) {
    if (arr.includes(elem)) {
      return false
    } else {
      return true
    }
  }
}

→ Ссылка