Я наткнулся на эту замечательную функцию для удаления ложных значений из массива:
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. Я не совсем понял, [...] возвращает значение, которое приводит к истинному , поскольку английский не является моим первым языком, но я думаю, что это означает что-то вроде [...] возвращает только истинные значения .