如何定义条件数组元素? 我想这样做:

const cond = true;
const myArr = ["foo", cond && "bar"];

这正如预期的那样工作,结果是["foo", "bar"],但如果我将cond设置为false,我得到以下结果:["foo", false]

如何定义具有条件元素的数组?


当前回答

当条件为false时,可以将数组展开到数组内部,以保持项数组干净。

你可以这样做:

//返回['foo', 'bar'] Const项= [ “foo”, …真的吗?['bar']: [], …假的?['falsy']: [], ] console.log(物品)

解释:

如你所见,三元运算符总是返回一个数组。

如果条件为真,则返回['bar'],否则返回空数组[]。

之后我们散开……结果数组(来自三元操作)和数组的项被推入到父数组。

如果没有任何数组项(当三元检查为false时),则不会推送任何东西,这是我们的目标。


在另一个回答中,我解释了同样的想法,只是针对对象。你也可以在这里查看。

其他回答

如果你真的想把它作为一行,你可以使用:

const cond = true;
const myArr = ["foo"].concat(cond ? ["bar"] : []);

有几种不同的方法,但这种方法并不适用于Javascript。

最简单的解决方案是使用if语句。

if (myCond) arr.push(element);

还有过滤器,但我不认为这是你在这里想要的,因为你似乎要“添加这个东西,如果这个条件是真的”,而不是根据某些条件检查所有东西。虽然,如果你想变得非常怪异,你可以这样做(不建议,但你可以这样做很酷)。

var arr = ["a", cond && "bar"];
arr.filter( e => e)

基本上它会过滤掉所有非真值。

当条件为false时,可以将数组展开到数组内部,以保持项数组干净。

你可以这样做:

//返回['foo', 'bar'] Const项= [ “foo”, …真的吗?['bar']: [], …假的?['falsy']: [], ] console.log(物品)

解释:

如你所见,三元运算符总是返回一个数组。

如果条件为真,则返回['bar'],否则返回空数组[]。

之后我们散开……结果数组(来自三元操作)和数组的项被推入到父数组。

如果没有任何数组项(当三元检查为false时),则不会推送任何东西,这是我们的目标。


在另一个回答中,我解释了同样的想法,只是针对对象。你也可以在这里查看。

替代方法:预过滤填充而不是后过滤:

const populate = function(...values) {
    return values.filter(function(el) {
        return el !== false
    });
};

console.log(populate("foo", true && "bar", false && "baz"))

返回

(2) ["foo", "bar"]

我知道这不能解决速记符号(因为无论你怎么尝试,它都不会起作用),但它接近于那个。

const cond = false;
const myArr = ["foo", cond ? "bar" : null].filter(Boolean);

console.log(myArr)

将导致["foo"]