Итерация внутри JavaScript метода фильтра - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь сравнить два заданных параметра функции. Точная проблема заключается в следующем:

Вам будет предоставлен начальный массив (первый аргумент в функции разрушителя), за которым следует один или несколько аргументов. Удалите все элементы из исходного массива, которые имеют то же значение, что и эти аргументы.

Примечание. Необходимо использовать объект аргументов.

console.log (destroyer ([1, 2, 3 , 1, 2, 3], 2, 3)); // ожидаемый результат: [1,1]

Я использую метод фильтра для итерации по массиву, но я не могу сравнить аргументы с элементами массива внутри обратного вызова фильтра.

    function destroyer(arr, ...args) {

    let result = arr.filter(num => {

        for (let i = 0; i<=args.length; i++ ){
             num !== args[i]
        }

    }); 
    return result; 

    }


console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

Я могу выполнить итерацию для l oop, но не могу использовать вывод для l oop для выполнения итерации фильтра.

Есть идеи?

Ответы [ 2 ]

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

Вероятно, более простой способ достижения цели, используя .filter() с .includes(). Кроме того, вы можете использовать для своей функции ...rest так называемые параметры отдыха , см. Документацию:

Синтаксис параметра rest позволяет нам представлять неопределенное количество аргументов в виде массив.

Попробуйте сделать следующее:

const destroyer = (arr, ...rest) => {
  return arr.filter(num => !rest.includes(num));
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

Надеюсь, это поможет!

0 голосов
/ 15 апреля 2020

Метод filter () создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией.

Пример:

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

via MDN

Фильтр выполняет итерацию по всем элементам некоторого массива и возвращает новый массив. Он помещает элемент в новый массив только в том случае, если обратный вызов (ваша функция вызывается в качестве параметра фильтра) возвращает true, в противном случае он опускается.

Далее стоит использовать параметры rest для достижения двух массивов (начального и значений для исключения ).

Синтаксис остальных параметров позволяет нам представлять неопределенное количество аргументов в виде массива.

function sum(...theArgs) {
  return theArgs.reduce((previous, current) => {
    return previous + current;
  });
}

console.log(sum(1, 2, 3));
// expected output: 6

console.log(sum(1, 2, 3, 4));
// expected output: 10

Решение с объяснением:

//Declare your function, first parameter is initial array, the second one is also array created by using rest parameters
function destroyer(initialArray = [], ...toExclude) {
    // filter initialArray, if el (single element) is NOT included in "toExclude" it returns true
    // and add this particular element to the result array
    let result = initialArray.filter(el => toExclude.includes(el) == false);

    //return result
    return result;
}
...