Mein Code
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
Dies ergibt die folgenden Ergebnisse
["a","b",undefined]
Ich möchte nicht undefiniert im Ergebnisarray. Wie kann ich das tun?
javascript
Akshat Jiwan Sharma
quelle
quelle
undefined
. Was erwarten Sie, wenn es sich nicht um eine Zeichenfolge handelt? Eine leere Zeichenfolge?Antworten:
Sie geben nichts zurück, falls das Element keine Zeichenfolge ist. In diesem Fall gibt die Funktion undefiniert zurück, was Sie im Ergebnis sehen.
Die Zuordnungsfunktion wird verwendet, um einen Wert einem anderen zuzuordnen, aber es sieht so aus, als ob Sie das Array tatsächlich filtern möchten, für das eine Zuordnungsfunktion nicht geeignet ist.
Was Sie eigentlich wollen, ist eine Filterfunktion . Es wird eine Funktion verwendet, die true oder false zurückgibt, je nachdem, ob das Element im resultierenden Array enthalten sein soll oder nicht.
quelle
Der Filter funktioniert für diesen speziellen Fall, in dem die Elemente nicht geändert werden. In vielen Fällen möchten Sie jedoch bei Verwendung der Karte Änderungen an den übergebenen Elementen vornehmen.
Wenn dies Ihre Absicht ist, können Sie reduzieren verwenden :
quelle
map
ergibt Arrays mitundefined
.filter
gibt nur den Artikel zurück oder nicht. das ist perfektDa ES6
filter
die Notation mit spitzen Pfeilen unterstützt (wie LINQ):So kann es auf folgenden Einzeiler reduziert werden.
quelle
Meine Lösung wäre, Filter nach der Karte zu verwenden.
Dies sollte jeden JS-Datentyp unterstützen.
Beispiel:
quelle
Sie geben nur dann einen Wert zurück, wenn das aktuelle Element a ist
string
. Vielleicht reicht es aus, ansonsten eine leere Zeichenfolge zuzuweisen:Wenn Sie Elemente ohne Zeichenfolge filtern möchten, sollten Sie diese natürlich nicht verwenden
map()
. Sie sollten sich vielmehr mit der Verwendung derfilter()
Funktion befassen.quelle
quelle
Sie können wie folgt implementieren. Angenommen, Sie möchten ein Array von Werten.
quelle