Wie filter() NaN, null, 0, false, array (JS)
Wurde ich gebeten, heraus zu filtern, NaN, null, 0, false in einem array.
Glücklicherweise habe ich die Frage beantwortet.
function bouncer(arr) {
function filterer(arr) {
return arr > 0|| isNaN(arr) === true;
}
arr = arr.filter(filterer);
return arr;
}
//example input
bouncer([0, 1, 2, 3, 'ate', '', false]); //output [1, 2, 3, 'ate']
aber die Sache ist ich weiß wirklich nicht, wie ich kam mit der Antwort oder eher ich weiß nicht, wie es funktioniert. Speziell auf arr > 0 wie hast den filter wissen, dass die arr ist bereits auf arr[1], arr[2], etc.. ohne die Verwendung einer Schleife zu Durchlaufen, die in allen Arrays.
oder einfach nur erklären, wie code funktioniert. [Ich habe versucht, es zu erklären, klar ---]
Dein code ist falsch. Es schlägt für Werte wie
warum nicht
ja Boolean filter ist der beste, es sei denn, Sie wollen zu halten, undefined
Wenn Sie entfernen
Fairer Punkt, verpasste ich
-1
... Versuchen arr.filter(function(item) {return !!item;})
warum nicht
[0, 1, 2, 3, 'ate', '', false].filter(Boolean)
?ja Boolean filter ist der beste, es sei denn, Sie wollen zu halten, undefined
Wenn Sie entfernen
isNaN
dann @MattBurland ate
wird auch entfernen, Ausgabe [1, 2, 3]
Fairer Punkt, verpasste ich
ate
.InformationsquelleAutor Fhrey | 2015-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die docs für
Array.filter
. Beachten Sie insbesondere die Argumente an die callback:Also in deinem Fall
arr
ist das element (und schlecht benannt, daher ist deine Verwirrung). Filter durchläuft das array und für jedes Element ruft Sie die callback übergeben in das element an der aktuellen position alsarr
.Als andere haben darauf hingewiesen, in den Kommentaren, die Logik der filter callback ist tatsächlich fehlerhaft für negative Werte, aber das kann nicht ein Problem sein, wenn Sie wissen, dass das array wird nie negative Werte enthalten (aber das kann eine gefährliche Sache annehmen).
Und, natürlich, intern, dies ist die Schleife durch das array. Sie können nicht filtern (unsortierte) array, ohne Sie zu berühren, jedes element in dem array. Blick auf die polyfil in dem link um eine Idee zu bekommen, wie es könnte Arbeit (vielleicht, weil dies ist eine Implementierung detail, die möglicherweise unterscheiden sich in verschiedenen javascript-engines, aber wird sicherlich beinhalten eine Schleife irgendwo), ist es eine Schleife durch das array, ruft die callback - (Hinweis: die Argumente) und wenn der callback true zurück, es wird geschoben auf ein Ergebnis-array.
InformationsquelleAutor Matt Burland
Wenn Sie wurden gebeten, heraus zu filtern
NaN
,null
,0
,false
in ein array, dann wird Ihre Lösungen nicht wirklich funktionieren.Ihre Eingabe von:
Wird die Ausgabe:
Heraus zu filtern alle 'falsy' Werte können Sie einfach
Boolean
:Ausgabe:
Da die
Boolean
Konstruktor auch eine Funktion, es gibt entwedertrue
für "truthy' argument oderfalse
für 'falsy' - argument. Wenn der Wert nicht angegeben wird oder ist0
,-0
,null
,false
,NaN
,undefined
, oder die leere Zeichenfolge (""
), hat das Objekt den Wert "false". Alle anderen Werte, einschließlich aller Objekt oder string"false"
erstellen Sie ein Objekt mit einem anfänglichen Wert vontrue
.InformationsquelleAutor Bluefin
Können Sie auch eine identity-Funktion statt
Boolean
.Diese Antwort ist besser als beide die akzeptierten ein-und den derzeit meisten von Ihnen positiv bewertet werden.
InformationsquelleAutor Trevor Dixon
Ich arbeite auch auf dem Freien Code Camp Falsy-Prahler-Algorithmus. Ich habe gefunden das der einfachste Weg, es zu tun ist:
InformationsquelleAutor elimcjah
Seit
false
,null
,0
,""
,undefined
undNaN
sind alle Falsy Werte in JavaScript, daher werden Sie zurückkehren false, wenn getestet.Nur Werte, die nicht return false Hinzugefügt werden, um die array.
InformationsquelleAutor Ravi Kumar Seth
Wäre das nicht eleganter auf der Basis Annahme, dass alle unerwünschte Elemente sind gegossen, um den Wert false, wenn boolean erwartet, also:
InformationsquelleAutor adam bahdaj
Wenn Sie wollen einfach nur eine Erklärung. Array
filter()
als name vorschlagen. Entfernen Sie unerwünschte element if-Bedingung falls falsch (false).(
arr > 0|| isNaN(arr) === true
)Ausgabe:
InformationsquelleAutor Manwal
Da ich ein Anfänger a-Kodierung, meine Logik ging um die Verwendung der primitive Boolesche Werte zu vergleichen die Elemente
gefiltert, aber das war, bevor ich gelesen habe, wird das Boolean-Objekt-Referenz, die Sie sehen, ist, dass
wie Ihr dort geschrieben,
"Der Wert als Erster parameter übergeben wurde, ist in einen booleschen Wert konvertiert, wenn nötig. Wenn der Wert nicht angegeben oder ist 0, -0, null, false, NaN, undefined, oder die leere Zeichenkette (""), das Objekt hat einen Anfangswert false. Alle anderen Werte, einschließlich aller Objekt-oder der string "false" erstellen Sie ein Objekt mit einem anfänglichen Wert true."
So die Logik, da filter gibt den Wert zurück, wenn seine true oder false, sollten Sie Werte zurückgeben, wenn
Sie sind wahr.
Auch habe ich nicht alles erfahren, was über die filter-Methode, für das, was ich habe recherchiert, ich habe
ein bisschen mehr Informationen, die ich hier erklären möchte.
Neudefinition der Methode (die es bereits gibt, ist nur zum Verständnis)
die filter-Methode nimmt eine Funktion, die aufgerufen wird
ein Prädikat ist eine Funktion, die Sie empfängt,
einen Wert und gibt true oder false zurück.
Die var-Ergebnisse ist ein leeres array, in dem die Ergebnisse abgelegt werden mit der push-Methode.
Die verwenden wir eine forEach-Methode mit diesem, (das, in diesem Kontext angewendet wird, um die array-Prototyp bedeutet dies, dass Sie die filter-Methode zur Verfügung, die auf jedem array, das Sie definieren, mit
die Syntax von Arrays.Methode(args) ins diesem Fall array.filter(args))
einige Ressourcen
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
Führen Sie jetzt eine operation in jedem Punkt auf dem array mit der forEach-Methode, die wir anwenden, die das Prädikat Funktion zu Jucken Element des array, und wenn es Sie gibt true zurück, wird es hinzufügen, um die Ergebnisse.
//-------------------------------Die Richtige Lösung---------------------------
//----------Code ohne die filter-Methode---------
Hoffe, das hilft zu verstehen, die Methode, und das erste, was war nicht zu verstehen, war der Teil übergeben, die Funktion, die das Prädikat der Methode, wenn ich Fehler hier bitte vorschlagen von Korrekturen.
InformationsquelleAutor Jose manuel Alves Sousa
Sieht aus wie Boolean, ist die einfachste Lösung/Antwort für die "FreeCodeCamp" Herausforderung, aber es könnte nützlich sein, zu versuchen, ein paar Dinge, nur um den Dreh von "warum" und "wie".
Diese wertet alles durch den filter, unter Verwendung der Funktion(callback) übergeben, die Werte zurückgibt. Wenn es nicht einen Wert zurück, der null etc nicht, Sie nicht an die Rückkehr. Zumindest diese Methode hat mir geholfen, zu verstehen, warum, anstatt nur den test zu bestehen.
InformationsquelleAutor Holden
Diese nicht beantworten Sie die Frage in ein nützlich Weg. warum glaubst du das ist die Antwort? wie funktioniert es? Einfach sagen, jemand zu ändern Sie Ihren code oder eben jemandem funktionierenden code ohne Kontext oder Bedeutung nicht helfen, Sie lernen, was Sie falsch gemacht haben, und ist auch nicht so nützlich für die zukünftigen Leser.
InformationsquelleAutor ZhaoWeihao