В какой момент Array .prototype .filter () проверяет наличие ложных значений? - PullRequest
1 голос
/ 03 мая 2019

Я наткнулся на эту замечательную функцию для удаления ложных значений из массива:

let other = array.filter(item => item);

Но я не понимаю, как это может работать. Насколько я понимаю, объяснение Array .prototype .filter () найдено в MDN:

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

Следующий код должен совпадать с кодом, найденным выше (и он обеспечивает тот же вывод):

function foo(item) {
  return item;
}

let other = array.filter(foo);

Но foo() просто возвращает все ложные значения, как вы можете видеть во фрагменте ниже (как и ожидалось). Когда происходит фильтрация, если ложные значения ДОПУСКАЮТ переданную функцию ?

let array = ['foo', undefined, false, 'bar'];

function foo(item) {
  return item;
}

array.forEach(item => console.log(foo(item)));

РЕДАКТИРОВАТЬ: Возникло некоторое недопонимание по поводу моего вопроса: я знаю, что я не использую filter() в фрагменте. Это потому, что его единственная цель - показать, что все значения проходят -функцию foo(), которая в то время казалась противоречием: [...] всем проходящим элементам тест реализован с помощью предоставленной функции.

Глядя на Polyfill и описание, я теперь понимаю, почему он работает так, как работает. Спасибо, @adiga. Я не совсем понял, [...] возвращает значение, которое приводит к истинному , поскольку английский не является моим первым языком, но я думаю, что это означает что-то вроде [...] возвращает только истинные значения .

1 Ответ

1 голос
/ 03 мая 2019

Я не уверен, правильно ли я понял вопрос, но filter возвращает только те значения, для которых обратный вызов фильтра возвращает значение, которое приводится к true (т.е. не ложно).

Вот почему для фильтрации ложных значений просто требуется, чтобы функция фильтра возвращала само значение.

(Обратный вызов также мог бы явно возвращать логическое значение с !!value, что могло бы сделать то же самое.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...