ES6扩展元素默认值优化:空数组时设空对象的更优实现问询
更优雅的空数组默认值处理方案
嘿,先给你说下为啥你之前的写法没生效——JavaScript里**空数组[]在布尔判断中是true**哦!所以[...question.documents] || [{}]这种写法,哪怕原数组是空的,展开后还是[],逻辑或会直接返回这个空数组,不会触发[{}]的默认值,这就是问题所在~
下面给你几个更简洁的实现方式,一步到位搞定:
1. 三元运算符(最通用,兼容所有环境)
直接在赋值时判断数组长度,一步生成目标数组:
var obj = { documents: question.documents.length > 0 ? [...question.documents] : [{}] };
如果需要考虑question.documents可能不存在(比如为undefined)的情况,可以先做一层兜底:
var obj = { documents: (question.documents || []).length > 0 ? [...(question.documents || [])] : [{}] };
2. ES6+ 可选链 + 三元(更安全简洁)
如果你的项目环境支持ES6+语法,用可选链可以避免documents不存在时的报错:
const obj = { documents: question.documents?.length ? [...question.documents] : [{}] };
3. 利用数组length的布尔特性(简写版)
因为非零的length在布尔判断中是true,零是false,可以简化成:
var obj = { documents: question.documents.length ? [...question.documents] : [{}] };
这些方法都能替代你现在的if判断写法,不用先创建对象再修改,直接在初始化时就处理好默认值,代码更简洁也更易读~
内容的提问来源于stack exchange,提问作者levis
相关产品推荐
相关产品推荐

