Porównaj ceny domen i usług IT, sprzedawców z całego świata

Jak zdefiniować tablicę z elementami warunkowymi?


jak mogę zdefiniować warunkowe elementy tablicy?
chcę zrobić coś takiego:
const cond = true;
const myArr = ["foo", cond && "bar"];

działa to zgodnie z oczekiwaniami:
["foo", "bar"]
Ale jeśli ustawię
cond
na
false
, otrzymam następujący wynik:
["foo", false]
Jak mogę zdefiniować tablicę z elementem warunkowym?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz zdekomponować tablicę w tablicy, aby zachować czystość tablicy elementów, gdy warunek to
false
.

Oto jak możesz to zrobić

:
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]console.log(items)


Wyjaśnienia

:
Jak widać, operator Terrary zawsze zwraca tablicę.
Jeśli warunek to
true
, to zwraca
['bar']
, w przeciwnym razie pustą tablicę
[]
.
Następnie rozwijamy wynikową tablicę
...
(z operacji trójskładnikowej), a elementy tablicy są przenoszone do tablicy nadrzędnej.
Jeśli nie ma elementów tablicy (gdy walidacja trójskładnikowa jest
false
), nic nie zostanie pobrane, co jest naszym celem.
W innej odpowiedzi wyjaśniłem ten sam pomysł, ale dla przedmiotów. Ty też możesz to sprawdzić

tutaj
https://stackoverflow.com/a/50367186/4312466
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

chciałbym to zrobić
<pre class="lang-js prettyprint-override">
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean)// ['one', 'three']

Pamiętaj, że spowoduje to również usunięcie

fałszywy
https://developer.mozilla.org/ ... Falsy
wartości, takie jak puste ciągi.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz spróbować prostego, jeśli:
if(cond) {
myArr.push("bar");
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli ty

naprawdę

chcesz zachować to jako jedną wkładkę, możesz użyć:
const cond = true;
const myArr = ["foo"].concat(cond ? ["bar"] : []);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie masz wielu opcji poza korzystaniem z
push
:
const cond = true;
const myArr = ["foo"];if (cond) myArr.push("bar");

Innym pomysłem jest potencjalne dodanie wartości null i odfiltrowanie ich:
const cond = true;
const myArr = ["foo", cond ? "bar" : null];myArr = myArr.filter((item) => item !== null);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jest kilka różnych sposobów, ale sposób, w jaki to robisz, tak naprawdę nie działa w przypadku Javascript.
Najprostszym rozwiązaniem byłoby po prostu użycie instrukcji if.
if (myCond) arr.push(element);

Jest też
filtr
, ale nie sądzę, żeby to w ogóle był to, czego tutaj potrzebujesz, ponieważ wydaje się, że wolisz „Dodaj tę jedną rzecz, jeśli ten jeden warunek jest prawdziwy” zamiast sprawdzać wszystko zgodnie z jakimś stanem. Chociaż, jeśli chcesz naprawdę oszaleć, możesz (nie polecam, ale fajnie, że możesz).
var arr = ["a", cond && "bar"];
arr.filter( e => e)

Zasadniczo po prostu odfiltruje wszystkie nieprawidłowe wartości.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

const cond = false;
const myArr = ["foo", cond ? "bar" : null].filter(Boolean);console.log(myArr)

Efektem będzie ["foo"]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Alternatywne podejście: wypełnianie filtra wstępnego zamiast filtrowania końcowego:
const populate = function(...values) {
return values.filter(function(el) {
return el !== false
});
};console.log(populate("foo", true && "bar", false && "baz"))

Zwroty
(2) ["foo", "bar"]

Wiem, że to nie rozwiązuje notacji skróconej (ponieważ nie zadziała bez względu na to, jak bardzo się starasz), ale jest blisko.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

jeśli używasz es6, proponuję
let array = [
"bike",
"car",
name === "van" ? "van" : null,
"bus",
"truck",
].filter(Boolean);
Ta tablica będzie zawierać wartość „van” tylko wtedy, gdy nazwa to „van”, w przeciwnym razie zostanie odrzucona.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

jeśli używasz
Array.push
Możesz wykonać następujące czynności
var a = ["1"]
a.push(... !true ? ["2"] : [])

Wynik-
["1"]
lub
var a = ["1"]
a.push(... true ? ["2"] : [])

Wynik to
["1", "2"]

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się