我如何定义条件数组元素?我想做这样的事情:
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]
如何定义带有条件元素的数组?
Answers:
当条件为时,可以将数组散布在数组内部,以保持项目数组的清洁false
。
这是您的操作方法:
// Will result in ['foo', 'bar']
const items = [
'foo',
... true ? ['bar'] : [],
... false ? ['falsy'] : [],
]
console.log(items)
说明:
如您所见,三元运算符总是返回一个数组。
如果条件是true
,则返回['bar']
,否则返回空数组[]
。
之后,我们展开...
结果数组(来自三元运算),并将数组的项目推送到父数组。
如果没有任何数组项(当三元检查为时false
),则不会执行任何操作,这是我们的目标。
在其他答案中,我解释了相同的想法,只是针对对象。您也可以在这里检查。
我会这样做
[
true && 'one',
false && 'two',
1 === 1 && 'three',
1 + 1 === 9 && 'four'
].filter(Boolean) // ['one', 'three']
请注意,这还将删除虚假值,例如空字符串。
除了使用,您没有太多选择push
:
const cond = true;
const myArr = ["foo"];
if (cond) myArr.push("bar");
另一个想法可能是添加null并将其过滤掉:
const cond = true;
const myArr = ["foo", cond ? "bar" : null];
myArr = myArr.filter((item) => item !== null);
有几种不同的方法,但是您执行的方法实际上不适用于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"]
我知道这不能解决速记符号(因为无论您尝试什么都将无法使用),但是它已经接近了。