ES6 扩展元素 - 默认值



如果我传入的数组为空,我需要将一个空对象设置为默认值。像这样:

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));

这是另一种可能性:

const question = { documents: [] };
const [firstElm = {}, ...otherElms] = question.documents;
const obj = { documents: [firstElm, ...otherElms] };
console.log(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);

最短的路

const  obj1 ={...(true&& {x:1})};
console.log(obj1)
const  obj2 ={...(false&& {y:1})};
console.log(obj2)

最新更新