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)类方法原型方法

ES6扩展/收集运算符--spread/rest

ES6浅谈 -- 数组扩展

javascript ES6 Set和Spread Array Unique

es6的拓展运算符 spread ...

Es6之Spread Operater拷贝对象