我正在根据这里所解释的条件将元素推送到数组http://2ality.com/2017/04/conditional-literal-entries.html
const arr = [
...(cond ? ['a'] : []),
'b',
];
现在,这很好用,但是当我尝试
时const arr = [
...(cond && ['a']),
'b',
];
相反,它停止工作。
我想知道为什么它不再起作用了,如果有办法有条件地推动使用扩展运算符和&&而不是?。
谢谢
答案 0 :(得分:2)
不,这是不可能的,因为所有可迭代的对象都是真实的。
如果cond
为假,则您有Symbol.iterator
无法传播的值
带有@@迭代器方法的内置类型是:
var cond = false;
const arr = [
...(cond && ['a']), // throws error, function expected
'b',
];
console.log(arr);

答案 1 :(得分:1)
是,有可能。 但是也许这是一个过分的,它表现较差并降低了可读性。
const arr = [];
arr.push(...[false && 'nope'].filter(v => v));
arr.push(...[true && 'yep'].filter(v => v));
arr.push(...[false && 'no', true && 'yes'].filter(v => v));
console.info(arr);
与@Nina Scholz indicated一样,传播操作符需要迭代。通过使用第二个数组(可能为空),我们最终可以达到以下状态(arr.push()
)。