如何在JavaScript中单行实现满足条件时向数组添加元素?
单行条件向数组添加元素的JavaScript解决方案
你之前的写法存在两个核心问题:
Array.push()方法返回的是数组的新长度,而非修改后的数组本身,所以你的arr变量实际拿到的是数字,不是目标数组。- 当
condition为假时,你传入的表达式会返回false或undefined,push会把这些值直接添加到数组里,导致冗余元素。
以下是几种可行的单行解决方案,均无需额外if语句:
方案1:扩展运算符(推荐,可读性高)
利用扩展运算符创建新数组,条件满足时追加目标元素,否则追加空数组:
return [...await getArray(params), ...(condition ? [itemToAdd] : [])];
- 当
condition为true时,[itemToAdd]被展开,元素被添加到数组末尾; - 当
condition为false时,[]被展开,不会添加任何内容。
方案2:concat方法
Array.concat()会返回新数组,不会修改原数组,适合链式调用:
return (await getArray(params)).concat(condition ? [itemToAdd] : []);
如果itemToAdd本身不是数组,也可以简化为:
return (await getArray(params)).concat(condition ? itemToAdd : []);
(注:如果itemToAdd是数组,concat会自动展开它;若不想展开,坚持用[itemToAdd])
方案3:短路逻辑简化写法
利用逻辑与的短路特性,进一步缩短代码:
return (await getArray(params)).concat(condition && [itemToAdd] || []);
- 当
condition为真时,condition && [itemToAdd]返回[itemToAdd],concat添加该元素; - 当
condition为假时,表达式返回[],concat无操作。
内容的提问来源于stack exchange,提问作者big boy
相关产品推荐
相关产品推荐

