2017-07-04 9 views
5

どのように条件付き配列要素を定義できますか? 私はこのような何かをしたい:条件付き要素で配列を定義する方法は?

const cond = true; 
const myArr = ["foo", cond && "bar"]; 

この期待通りに動作します:["foo", "bar"]

は、しかし、私はfalsecondを設定した場合、私は次のような結果を得る:["foo", false]

をどのようにして定義することができます条件付き要素を持つ配列?

+0

if(cond){myArr。push( "bar")} –

+0

プッシュ機能を使用するか、あとですべてのヌルエントリを削除する必要があります。 "bar":null' – NtFreX

+1

この構文で何をしても、少なくとも「未定義」を追加する必要があります。 – Jankapunkt

答えて

7

// Will result in ['foo', 'bar'] 
 
const items = [ 
 
    'foo', 
 
    ... true ? ['bar'] : [], 
 
    ... false ? ['bar'] : [], 
 
] 
 

 
console.log(items)

1

場合は、シンプルで試すことができます:あなたはpushを使用するよりも、他のたくさんのオプションを持っていない

if(cond) { 
    myArr.push("bar"); 
} 
1

const cond = true; 
const myArr = ["foo"]; 

if (cond) myArr.push("bar"); 

もう一つのアイデアは、潜在的にヌルのを追加し、それらをフィルタリングされています。

const cond = true; 
const myArr = ["foo", cond ? "bar" : null]; 

myArr = myArr.filter((item) => item !== null); 
2

あなた本当にが必要な場合1つのライナーとしてそれを維持するために、あなたが使用できます。

const cond = true; 
const myArr = ["foo"].concat(cond ? ["bar"] : []); 
1

をいくつかの異なる方法がありますが、それは本当にJavaScriptが動作しませんやっている方法はあり。

最も簡単な解決策は、if文だけを持つことです。

if (myCond) arr.push(element); 

ありfilterもありますが、あなたは「この1つの条件がtrueの場合、この一つのことを追加」のために行くのではなくに対して、すべてをチェックしているように見えるので、私は、それはあなたがすべてでここに欲しいものだとは思いませんいくつかの状態。あなたが本当に気まぐれになりたいのであれば、これを行うことができます(お勧めしませんが、あなたができることは素晴らしいです)。

var arr = ["a", cond && "bar"]; 
arr.filter(e => e) 

基本的には、すべての非真値を除外します。私はそれがどんな動作しませんしませんので、それは省略表記を(解決しない知っている

const populate = function(...values) { 
    return values.filter(function(el) { 
     return el !== false 
    }); 
}; 

console.log(populate("foo", true && "bar", false && "baz")) 

戻り

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

+0

これはクールだ。あなたは 'var arr = [" a "、cond &&" bar "]。filter(e => e);' @Adam LeBlancを実行することもできます。しかし、クールなごみ;) –

+0

それはクールですが、私はそれに対してただ一つの条件付き値についてアドバイスします。一般的な目的に適しています。「すべての誤った値を取り除く」タイプのものです。あなたはちょうど1つの値のために全体の配列を通過することになるだろうから。しかし、条件付きの値が不確定な場合は、おそらく良い解決策です。 –

1

代替アプローチ:プレフィルタポストフィルタリングの代わりに取り込みますあなたが試してみてください)しかしそれはそれに近いです。あなたは条件がfalseあるとき、きれいな項目の配列を維持するために、配列の内部の配列を広げることができます

0

を私はこの

[ 
    true && 'one', 
    false && 'two', 
    1 === 1 && 'three', 
    1 + 1 === 9 && 'four' 
].filter(Boolean) // ['one', 'three'] 
にしてください
関連する問題