2016-08-17 2 views
0

Если я массив построен следующим образом:Javascript: условная строка в массиве

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

Как можно обернуть если заявление вокруг C так, что строка добавляется только если условие возвращает истину? Что-то вроде этого (псевдокод):

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) 

То есть, пусть третий элемент массива будет [ 'C', 'C value' ] только если x == true является true. Если это false, пусть третий элемент массива будет false.

А затем отфильтровать все falsy значения: null, undefined, false, +0, -0, NaN и "". Поэтому используйте этот подход только в том случае, если ваш массив не содержит ни одного из них.

4

Всего push it.

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

[толчок это действительно хорошо] (https://www.youtube.com/watch?v=vCadcBR95oU)! – Mottie

+0

Это то, что я думал, но есть ли что-то более «встроенное»? Объект, с которым я имею дело, большой, и есть много элементов тела. –

+1

@ CD-RUM нет * простой и надежный способ сделать это непосредственно в литерале массива. – zerkms

1

Вы также мог бы сделать строитель:

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; 
}; 

хотя это означает, что ваше значение всегда вычисляются, независимо от состояния.

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; 

}); 
Смежные вопросы