2016-08-17 11 views
0

で、私はそうのように構築された配列がある場合:Javascriptを:条件付きの行配列

body: [ 
    [ 'A', 'A value' ], 
    [ 'B', 'B value, other' ], 
    [ 'C', 'C value' ] 
] 

条件がtrueを返した場合、行のみが追加されるようにCの周りにif文をラップすることができますどのように?このようなもの(疑似コード):

body: [ 
    [ 'A', 'A value' ], 
    [ 'B', 'B value, other' ], 
    if (x == true) { 
    [ 'C', 'C value' ] 
    } 
] 
+0

私はちょうど明確にしたい。これは配列の配列ですか?それともオブジェクトの配列であると思われますか? –

+2

@giovannilobitosそれは何も変わりません – zerkms

答えて

1

あなたは、配列initilizer後にアイテムをプッシュ避けたい場合は、あなたが

body: [ 
    [ 'A', 'A value' ], 
    [ 'B', 'B value, other' ], 
    x == true && [ 'C', 'C value' ] 
].filter(Boolean) 

を好むことがあり、x == truetrueある場合にのみ、第三配列項目は[ 'C', 'C value' ]とします。 falseの場合は、3番目の配列項目をfalseとします。 nullundefinedfalse+0-0NaN""

そして、全てのfalsy値をフィルタリング。したがって、配列にこれらのいずれも含まれていない場合にのみ、このアプローチを使用してください。これは条件に関係なく、あなたの値は常に評価されます意味が

function ArrayBuilder() { 
    this.array = []; 
} 

ArrayBuilder.prototype.push = function (value) { 
    this.array.push(value); 
    return this; 
}; 

ArrayBuilder.prototype.pushIf = function (condition, value) { 
    if (condition) { 
     this.array.push(value); 
    } 

    return this; 
}; 

4

ただいまpushです。

if (x) { 
    yourReference.body.push([ 'C', 'C value' ]); 
} 
+2

[それは本当に良いプッシュ](https://www.youtube.com/watch?v=vCadcBR95oU)! – Mottie

+0

これは私が思ったことですが、もっと "インライン"なものがありますか?私が扱っているオブジェクトは大きく、多くのボディ要素があります。 –

+1

@ CD-RUM配列リテラルで直接行うのは簡単で堅牢な方法ではありません。 – zerkms

1

はまた、ビルダーを作ることができます。

body: new ArrayBuilder() 
    .push([ 'A', 'A value' ]) 
    .push([ 'B', 'B value, other' ]) 
    .pushIf(x, [ 'C', 'C value' ]) 
    .array, 
0

これは、ボディ内のすべての要素をループし、それぞれを条件付けします。

const body = [ 

    [ 'A', 'A value' ], 
    [ 'B', 'B value, other' ], 
    [ 'C', 'C value' ] 

]; 

const newArray = body.map(subArray => { 

    if (condition) return subArray; 

});