Ponieważ jestem początkujący o, kodowanie, moja logika poszła w użyciu prymitywnych Boolean's porównać item's filtrowane, ale to było przed Czytałem Boolean odwołanie do obiektu, można zobaczyć, że jak jego pisemne tam, "Wartość przekazana jako pierwszy parametr jest konwertowana na wartość logiczną, jeśli to konieczne.Jeśli wartość jest pominięta lub wynosi 0, -0, zero, fałsz, NaN, niezdefiniowana lub pusty ciąg (" "), obiekt ma wartość początkową false Wszystkie inne wartości, w tym dowolny obiekt lub ciąg "false", tworzą obiekt o wartości początkowej true." Więc logika, ponieważ filtr zwraca wartość, jeśli jest prawdą lub fałszem, powinieneś zwrócić wartości, jeśli są one prawdziwe . Również, nie dowiedziałem się wszystkiego o metodzie filtrowania, do tego, co zbadałem, mam dostał nieco więcej informacji, które postaram się wyjaśnić here.'
przedefiniowanie metody (to już istnieje, jest tylko dla zrozumienia) metoda filtr przyjmuje funkcję o nazwie predykatem, że jest funkcją który otrzymuje wartość i zwraca wartość true lub false.
Wyniki var to pusta tablica, w której wyniki zostaną pchnięte za pomocą metody push. Używamy w tym celu metody forEach (to, w tym kontekście jest stosowane do prototypu macierzy, oznacza to, że będzie dostępna metoda filtrowania dla każdej zdefiniowanej macierzy, z sintax dla array.method (args) ins tym przypadku array.filter (args)) niektóre zasoby https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
teraz będziemy prowadzić operację w każdym punkcie na tablicy za pomocą metody foreach, teraz będziemy stosować funkcję predykatu swędzieć pozycję tablica i jeśli zwróci true, doda ją do wyników.
Array.prototype.filter = function(predicate){
var results = [];
this.forEach(function(item) {
if (predicate(item)) {
results.push(item);
}
});
};
// ------------------------------- Prawidłowe rozwiązanie -------- -------------------
function bouncer (arrToFilter){
return arrToFilter.filter(Boolean);
}
// ---------- Kod bez metody filtrowania ------- -
function bouncerNoFilterMethod(arrToFilter){
var results = [];
arrToFilter.forEach(function(arrToFilter){
if(arrToFilter){
results.push(arrToFilter);
}
});
return results;
}
console.log(bouncerNoFilterMethod([7, "ate", "", false, 9]));
console.log(bouncerNoFilterMethod(["a", "b", "c"]));
console.log(bouncerNoFilterMethod([false, null, 0, NaN, undefined, ""]));
console.log(bouncerNoFilterMethod([1, null, NaN, 2, undefined]));
console.log(bouncer([7, "ate", "", false, 9]));
console.log(bouncer(["a", "b", "c"]));
console.log(bouncer([false, null, 0, NaN, undefined, ""]));
console.log(bouncer([1, null, NaN, 2, undefined]));
Nadzieja to pomaga zrozumieć, metoda, a pierwszą rzeczą, która nie rozumiejąc był częścią przekazując funkcję predykatu do metody, jeśli mam błędy tu proszę sugerować poprawek.
Twój kod jest nieprawidłowy. Nie działa dla wartości takich jak "-1" ... Wypróbuj 'arr.filter (function (item) {return !! item;})' –
@NiettheDarkAbsol why not '[0, 1, 2, 3, 'ate', '', false] .filter (Boolean) '? –
yeah Filtr Boolean jest najlepszy, chyba że chcesz zachować undefined – juvian