条件付き配列要素を定義するにはどうすればよいですか?私はこのようなことをしたい:
const cond = true;
const myArr = ["foo", cond && "bar"];
これは期待どおりに機能します。 ["foo", "bar"]
しかし、に設定cond
するfalse
と、次の結果が得られます。["foo", false]
条件付き要素を使用して配列を定義するにはどうすればよいですか?
回答:
条件がfalse
。の場合、アイテムの配列をクリーンに保つために、配列を配列内に広げることができます。
これがあなたがそれをすることができる方法です:
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
console.log(items)
説明:
ご覧のとおり、三項演算子は常に配列を返します。
条件がの場合はtrue
、を返し['bar']
、そうでない場合は空の配列を返します[]
。
その後、...
(三項演算から)結果の配列を分散し、配列の項目を親配列にプッシュします。
配列項目がない場合(3値チェックがの場合false
)、何もプッシュされません。これが私たちの目標です。
私はこれをします
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
これにより、空の文字列などの偽の値も削除されることに注意してください。
あなたは簡単な場合で試すことができます:
if(cond) {
myArr.push("bar");
}
以下を使用する以外に、それほど多くのオプションはありませんpush
。
const cond = true;
const myArr = ["foo"];
if (cond) myArr.push("bar");
別のアイデアは、潜在的にnullを追加し、それらを除外することです。
const cond = true;
const myArr = ["foo", cond ? "bar" : null];
myArr = myArr.filter((item) => item !== null);
いくつかの異なる方法がありますが、それを行う方法はJavascriptでは実際には機能しません。
最も簡単な解決策は、ifステートメントを用意することです。
if (myCond) arr.push(element);
もありfilter
ますが、すべてを何らかの条件でチェックするのではなく、「この1つの条件が真なら、これを1つ追加する」ということになるので、ここではまったく必要ないと思います。ただし、本当に気紛れになりたい場合は、これを行うことができます(お勧めしませんが、できるのはクールです)。
var arr = ["a", cond && "bar"];
arr.filter( e => e)
基本的には、真でない値をすべて除外するだけです。
var arr = ["a", cond && "bar"].filter(e => e);
@Adam LeBlancを実行することもできますが、その通りです。おそらくゴミです。しかし、かっこいいゴミ;)
代替アプローチ:ポストフィルタリングの代わりにプレフィルター入力:
const populate = function(...values) {
return values.filter(function(el) {
return el !== false
});
};
console.log(populate("foo", true && "bar", false && "baz"))
戻り値
(2) ["foo", "bar"]
私はそれが速記法を解決しないことを知っています(あなたが何をしようとしても機能しないので)が、それはそれに近いです。
es6を使用している場合は、
let array = [
"bike",
"car",
name === "van" ? "van" : null,
"bus",
"truck",
].filter(Boolean);
この配列には、名前が「van」と等しい場合にのみ値「van」が含まれます。それ以外の場合は破棄されます。