繁体   English   中英

ES6:有条件使用传播算子

[英]ES6: Conditional use of spread operator

我想编写一个表达式,它使用query参数的值并生成一个新对象,该对象包含query中的所有内容和默认的$sort值,但$sort是不存在$sort

我觉得我应该使用传播运算符...来执行此操作,但是不知道在这种情况下如何使用它。

下面的代码不起作用,因为它总是返回{$sort: {priority: -1, createdAt: -1}}理想情况下,它应该在console.log语句旁边打印出注释中的内容:

'use strict'
const funcUnderTest = (query) => ({
  query: /^sort/.test(query) ? query : {$sort: {priority: -1, createdAt: -1}}
})

console.log(funcUnderTest(null)) // Should be { query: {$sort: {priority: -1, createdAt: -1}}}
console.log(funcUnderTest(({}))) // Should be { query: {$sort: {priority: -1, createdAt: -1}}}
console.log(funcUnderTest(({forCandidate: 123}))) // Should be { query: {forCandidate: 123, $sort: {priority: -1, createdAt: -1}}}
console.log(funcUnderTest(({$sort: {name:1}}))) // Should be { query: {$sort: {name: 1}}}
console.log(funcUnderTest(({forCandidate: 123, $sort: {name:1}}))) // Should be { forCandidate: 123, query: {$sort: {name: 1}}}

您可以为此使用Object.assign

我将假设您的最后一个示例输出是错误的(应该是{ query: {$sort: {name: 1}, forCandidate: 123}} ),因为它与您的其他预期输出不一致。

 'use strict' const funcUnderTest = (query) => ({ query: Object.assign({$sort: {priority: -1, createdAt: -1}}, query || {}) }) console.log(funcUnderTest(null)) // Should be { query: {$sort: {priority: -1, createdAt: -1}}} console.log(funcUnderTest(({}))) // Should be { query: {$sort: {priority: -1, createdAt: -1}}} console.log(funcUnderTest(({forCandidate: 123}))) // Should be { query: {forCandidate: 123, $sort: {priority: -1, createdAt: -1}}} console.log(funcUnderTest(({$sort: {name:1}}))) // Should be { query: {$sort: {name: 1}}} console.log(funcUnderTest(({forCandidate: 123, $sort: {name:1}}))) // Should be { forCandidate: 123, query: {$sort: {name: 1}}} 

感谢@JLRishe的回答,并了解Object.assign与使用扩展语法相同,不同之处在于,由于它是非可变的,因此在||之后不需要{} ,这是具有传播语法的版本。

 'use strict' const funcUnderTest = (query) => ({ query: { $sort: {priority: -1, createdAt: -1}, ...query } }) console.log(funcUnderTest(null)) console.log(funcUnderTest(({}))) console.log(funcUnderTest(({forCandidate: 123}))) console.log(funcUnderTest(({$sort: {name:1}}))) console.log(funcUnderTest(({forCandidate: 123, $sort: {name:1}}))) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM