Я наткнулся на эту замечательную функцию для удаления ложные значения из массива:
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)));
EDIT: по моему вопросу возникло некоторое недопонимание: я знаю, что не использую filter()
во фрагменте. Это связано с тем, что его единственная цель — показать, что все значения проходят foo()
-функцию, что в то время казалось противоречием: [...] всем элементам, проходящим тест, реализованный предоставленной функцией.
Глядя на Polyfill и описание, я теперь понимаю, почему он работает так, как работает. Спасибо, @adiga. Я не совсем понял, что [...] возвращает значение, которое приводит к true, поскольку английский не является моим родным языком, но я думаю, что это означает что-то вроде [...] возвращает только истинные значения.
Array.prototype.filter
: filter() вызывает предоставленную функцию обратного вызова один раз для каждого элемента в массиве и создает новый массив всех значений, для которых обратный вызов возвращает значение, приводящее к истинности - person adiga   schedule 03.05.2019foo()
вообще не меняет значения. - person leonheess   schedule 03.05.2019filter
на той же странице, на которую ссылается вопрос - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ - person Nikhil Aggarwal   schedule 03.05.2019foo
сама по себе буквально ничего не делает. Однако отправка его в качестве параметра функцииfilter
отфильтровывает ложные значения. - person Seblor   schedule 03.05.2019