Man*_*ler 54 javascript arrays
我该如何定义条件数组元素?我想做这样的事情:
const cond = true;
const myArr = ["foo", cond && "bar"];
Run Code Online (Sandbox Code Playgroud)
这按预期工作: ["foo", "bar"]
但是,如果我设置cond
到false
,我得到以下结果:["foo", false]
我怎么能用条件元素定义数组?
Jor*_*nev 128
您可以在数组内部传播数组,以便在条件满足时保持项数组清洁false
.
这是你如何做到的:
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
console.log(items)
Run Code Online (Sandbox Code Playgroud)
解释:
如您所见,三元运算符始终返回一个数组.
如果条件是true
,则返回['bar']
,否则返回一个空数组[]
.
之后,我们展开了...
结果数组(来自三元运算),数组的项目被推送到父数组.
如果没有任何数组项(当三元检查时false
),则不会推送任何内容,这是我们的目标.
在其他答案中,我解释了相同的想法,但对于对象.你也可以在这里查看.
Mic*_*rez 13
我会这样做的
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
Run Code Online (Sandbox Code Playgroud)
请注意,这也将删除虚假值,例如空字符串.
除了使用之外,您没有太多选择push
:
const cond = true;
const myArr = ["foo"];
if (cond) myArr.push("bar");
Run Code Online (Sandbox Code Playgroud)
另一个想法是可能添加空值并将其过滤掉:
const cond = true;
const myArr = ["foo", cond ? "bar" : null];
myArr = myArr.filter((item) => item !== null);
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下简单方法:
if(cond) {
myArr.push("bar");
}
Run Code Online (Sandbox Code Playgroud)
如果您真的想将其保持为一体,可以使用:
const cond = true;
const myArr = ["foo"].concat(cond ? ["bar"] : []);
Run Code Online (Sandbox Code Playgroud)
小智 5
const cond = false;
const myArr = ["foo", cond ? "bar" : null].filter(Boolean);
console.log(myArr)
Run Code Online (Sandbox Code Playgroud)
将导致 ["foo"]
归档时间: |
|
查看次数: |
17890 次 |
最近记录: |