我该如何定义条件数组元素? 我想要做这样的事情:如何用条件元素定义数组?
const cond = true;
const myArr = ["foo", cond && "bar"];
此按预期工作:["foo", "bar"]
但如果我设置cond
到false
,我得到以下结果:["foo", false]
我怎么能定义一个具有条件元素的数组?
我该如何定义条件数组元素? 我想要做这样的事情:如何用条件元素定义数组?
const cond = true;
const myArr = ["foo", cond && "bar"];
此按预期工作:["foo", "bar"]
但如果我设置cond
到false
,我得到以下结果:["foo", false]
我怎么能定义一个具有条件元素的数组?
您可以传播的数组的一个数组里面,以保持项目阵列干净,当条件为false
:
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['bar'] : [],
]
console.log(items)
您可以尝试使用简单的,如果:
if(cond) {
myArr.push("bar");
}
你根本就没有使用push
其他这么多的选择:
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);
如果你真的想要为了保持它作为一个班轮,你可以使用:
const cond = true;
const myArr = ["foo"].concat(cond ? ["bar"] : []);
有几种不同的方式,但你这样做的方式将不会真正用于Javascript。
最简单的解决方案是只有一个if语句。
if (myCond) arr.push(element);
还有filter
,但我不认为这是你想要的这里可言,因为你似乎是想为“添加这样一两件事,如果这一个条件为真”,而不是检查,对一切一些条件。虽然,如果你想变得非常怪异,你可以做到这一点(不会推荐,但它可以很酷)。
var arr = ["a", cond && "bar"];
arr.filter(e => e)
基本上它只会过滤掉所有的非真值。
这看起来很酷。你也可以做'var arr = [“a”,cond &&“bar”]。filter(e => e);'@Adam LeBlanc,但你说得对,可能是垃圾。但很酷的垃圾;) –
这很酷,但我会建议反对它只有一个条件值。它更适合一般用途“摆脱所有虚假价值”类型的东西。因为你只是想通过整个数组来获得一个值。但是如果你有一个未定数量的条件值,那么这可能是一个好的解决方案。 –
替代做法:前置过滤器填充的,而不是后过滤:
const populate = function(...values) {
return values.filter(function(el) {
return el !== false
});
};
console.log(populate("foo", true && "bar", false && "baz"))
返回
(2) ["foo", "bar"]
我知道,没有解决不了的速记符号(因为它不会工作,不管什么你尝试)但它接近于此。
我会做这个
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
尝试使用if(cond){myArr。推(“酒吧”)} –
你将需要使用推功能或删除所有空条目'cond? “bar”:null'。 – NtFreX
不管你用这个语法做什么,它至少会添加一个'undefined'。 – Jankapunkt