Случайно попаднах на тази страхотна функция за премахване на фалшиви стойности от масив:
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. Не разбрах напълно [...] връща стойност, която принуждава към true, тъй като английският не е първият ми език, но предполагам, че означава нещо подобно на [...] връща само верните стойности.
Array.prototype.filter
: filter() извиква предоставена функция за обратно извикване веднъж за всеки елемент в масив и конструира нов масив от всички стойности, за които обратното извикване връща стойност, която принуждава към true - 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