Почему JS complier не распознает этот вызов Array.prototype.filter - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь выяснить, почему мой вызов .prototype.filter дает мне TypeError: curr.filter is not a function.

const intersection = (arrays) => {
  return arrays.reduce((acc, curr) => {
    return curr.filter(el => acc.includes(el));
  });
};

console.log(intersection([5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]));

Насколько я понимаю, я объявляю функцию const intersection, которая принимает arrays, а затем возвращает результат вызова arrays.reduce, который "уменьшает" результаты фильтрации текущего значения и создания новый массив, который включает в себя все экземпляры аккумулятора acc, включая текущее значение curr.

Поскольку фильтр создает новый массив во время выполнения, я подумал, что это будет работать как есть, но пока нет. Что я не вижу?

1 Ответ

0 голосов
/ 22 января 2020

Использовать массив rest parameter, чтобы получить все параметры в виде массива. В данном коде вы берете только первый аргумент и игнорируете остальные.

попробуйте это.

const intersection = (...arrays) => {
    console.log("arrays: ", arrays);
    return arrays.reduce((acc, curr) => {
      return curr.filter(el => acc.includes(el));
    });
  };
  console.log("Result:" , intersection([5, 10, 15, 20], [15, 88, 1, 5, 7], [1, 10, 15, 5, 20]));
...