簡體   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