[英]“Holes” in array when use es6 spread operator on string with emojis
[英]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.