说我有一个数组定义
var array = [
"One",
"Two",
"Three",
]
...但是我只希望在另一个变量为true时添加“三个”。
var array = [
"One",
"Two",
(addThree ? "Three" : undefined),
]
问题是,如果addThree为false,那么当我只希望数组为[“ One”,“ Two”]时,数组就变成[“ One”,“ Two”,undefined]。
答案 0 :(得分:4)
您可以使用Array#concat
和conditional (ternary) operator ?:
来检查addThree
并获取值或空数组。
空数组不会更改返回数组的长度。
var addThree = false,
array = ["One", "Two"].concat(addThree ? "Three" : []);
console.log(array);
答案 1 :(得分:2)
使用不会改变的静态项目初始化它,然后在条件为真的情况下有条件地添加第三个:
var array = [
"One",
"Two",
];
if (addThree) {
array.push("Three");
}
答案 2 :(得分:2)
有很多方法可以做到这一点。
1。。使用spread operator (...)
var addThree=false;
const array = [
"One",
"Two",
...(addThree ? ['Three'] : []),
]
console.log(array);
如果数组文字的spread运算符(...),如果其操作数为空Array,则不执行任何操作。以这种方式使用split运算符会导致代码略隐。
2。。另一种选择是有条件地插入元素或未定义,然后过滤掉后一个值
var addThree=true;
var array = [
"One",
"Two",
(addThree ? 'Three' : undefined)
].filter(Boolean);
console.log(array);
3。。一种优雅且具有自我描述性的解决方案是使用push()构造Array:
var addThree=true;
const array = [];
array.push('One');
array.push('Two');
if (addThree) {
array.push('Three');
}
console.log(array);