Wie kann ich bedingte Array-Elemente definieren? Ich möchte so etwas tun:
const cond = true;
const myArr = ["foo", cond && "bar"];
das funktioniert wie erwartet: ["foo", "bar"]
Aber wenn ich gesetzt cond
zu false
, erhalte ich folgendes Ergebnis:["foo", false]
Wie kann ich ein Array mit einem bedingten Element definieren?
javascript
arrays
Manu Schiller
quelle
quelle
Antworten:
Sie können ein Array innerhalb eines Arrays verteilen, um das Array der Elemente sauber zu halten, wenn die Bedingung erfüllt ist
false
.So geht's :
Erklärungen :
Wie Sie sehen, gibt der ternäre Operator immer ein Array zurück.
Wenn die Bedingung erfüllt ist
true
,['bar']
wird ein leeres Array zurückgegeben[]
.Danach verteilen wir
...
das resultierende Array (aus der ternären Operation) und die Elemente des Arrays werden in das übergeordnete Array verschoben.Wenn es keine Array-Elemente gibt (wenn die ternäre Prüfung durchgeführt wird
false
), wird nichts verschoben, was unser Ziel ist.In einer anderen Antwort erklärte ich die gleiche Idee, aber für Objekte. Sie können es auch hier überprüfen .
quelle
Ich würde das tun
Beachten Sie, dass dadurch auch falsche Werte entfernt werden, z. B. leere Zeichenfolgen.
quelle
Sie können mit einem einfachen versuchen, wenn:
quelle
Wenn Sie es wirklich als Einzeiler behalten möchten, können Sie Folgendes verwenden:
quelle
const myArr = (cond ? ['item 1'] : []).concat(['item 2', 'item 3']);
Sie haben nicht so viele andere Optionen als
push
:Eine andere Idee besteht darin, möglicherweise Nullen hinzuzufügen und diese herauszufiltern:
quelle
Es gibt verschiedene Möglichkeiten, aber die Art und Weise, wie Sie es tun, funktioniert für Javascript nicht wirklich.
Die einfachste Lösung wäre, nur eine if-Anweisung zu haben.
Es gibt auch
filter
, aber ich denke nicht, dass Sie das hier überhaupt wollen, da Sie anscheinend "Fügen Sie diese eine Sache hinzu, wenn diese eine Bedingung wahr ist", anstatt alles mit einer Bedingung zu vergleichen. Obwohl, wenn Sie wirklich ausgeflippt werden möchten, können Sie dies tun (würde nicht empfehlen, aber es ist cool, dass Sie können).Grundsätzlich werden nur alle nicht wahren Werte herausgefiltert.
quelle
var arr = ["a", cond && "bar"].filter(e => e);
@Adam LeBlanc machen, aber Sie haben Recht, es ist wahrscheinlich Müll. aber cooler Müll;)Wird zu ["foo"] führen
quelle
Alternativer Ansatz: Vorfilter füllen statt Nachfiltern:
Kehrt zurück
Ich weiß, dass dies die Kurzschreibweise nicht löst (da es nicht funktioniert, egal was Sie versuchen), aber es kommt dem nahe.
quelle
Wenn Sie es6 verwenden, würde ich vorschlagen
let array = [ "bike", "car", name === "van" ? "van" : null, "bus", "truck", ].filter(Boolean);
Dieses Array enthält nur den Wert "van", wenn der Name gleich "van" ist, andernfalls wird er verworfen.
quelle
wenn du benutzt
Array.push
Sie können folgen
Ergebnis ist
["1"]
oder
Ergebnis ist
["1","2"]
quelle
check
und ein verwenden, istpush
Ihre Lösung definitiv nicht die mit der höchsten Klarheit. Ich würde bei bleiben,if (check) foo.push( item );
anstatt ein leeres Array im falschen Fall zu verbreiten.