ES6 spread元素 - 默认值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 spread元素 - 默认值相关的知识,希望对你有一定的参考价值。
如果我传入的数组为空,我需要将一个空对象设置为默认值。就像是:
var obj = { documents: [...question.documents] || [{}] }
我使用条件修复它,但我想知道是否有更好的方法来实现它。
if(obj.documents.length === 0) obj.documents.push({})
答案
因为即使是空阵列也是真的,我认为除了在某处进行明确的测试之外,没有任何优秀的解决方案。然而,三元组比if
语句更简洁:
const question = { documents: [] };
const { documents } = question;
const obj = { documents: documents.length !== 0 ? documents : [{}]}
console.log(JSON.stringify(obj));
另一答案
有几种方法可以在一个表达式中编写它
使用三元运算符:
var obj = { documents: [
...question.documents.length
? question.documents
: [{}]
]
};
使用默认值
var obj = { documents: [question.documents[0] || {}, ...question.documents.slice(1)] };
在这两种情况下,由于不得不多次引用源而导致一些尴尬
另一答案
扩展运算符用在空数组中。我没有看到在这里使用扩展运算符的重点。目标可以通过使用以下来实现。
var obj = { documents: question.documents.length ? question.documents : [{}]}
如果正在使用您提供的方法,则不需要or
子句,因为空数组也返回truthy值。所以它可以写成如下: -
var obj = { documents: question.documents }
if(!obj.documents.length) obj.documents.push({})
另一答案
这应该适合......
const question = {
documents: [],
};
const obj = {
documents: [].concat(question.documents.length ? question.documents : {})
};
console.log(obj);
以上是关于ES6 spread元素 - 默认值的主要内容,如果未能解决你的问题,请参考以下文章
ES6数组扩展运算符(Rest+Spread)类方法原型方法