利用reduce操作對物件進行操作
P粉423694341
2023-08-18 14:05:11
<p>這是我的意見:<code>{field1: {field2:'123', field3:{field4:'123'}}}</code></p>
<p>目標是:<code>{field1: {update: {field2:'123', field3: {update: {field4:'123'}}</code></p>
<p>這是我試過的:</p>
<pre class="brush:php;toolbar:false;">function updateDictHelper(obj) {
Object.entries(obj).reduce((updateClause = {}, [key, value]) => {
if (typeof value !== 'object') {
return {... updateClause, [key]: value}
} else {
return {... updateClause, [key]: {update: updateDictHelper(value)}}
}
})
}</pre>
<p>然而,無論如何我都無法使其工作。我對java/typescript還很陌生,非常感謝任何幫助。 </p>
您有兩個問題,第一個問題是您的
updateDirectHelper
函數沒有回傳任何內容。雖然在這個函數中有一個return
語句,但實際上它是嵌套在reduce
的回調函數(updateClause, [key, value]) => {
中,而不是updateDictHelper
本身。您的另一個問題是如何為
acc
提供預設值。 Reduce原生支援可選的第二個參數,該參數將作為acc
的初始值。最好的做法是盡可能提供一個初始值。如果您不包含它,
.reduce()
將跳過回調的第一個調用,並從將acc
設為數組中的第一個值開始調用回調函數,並將第二個參數設定為數組中的第二個值。如果您的陣列只有一個值,例如在您的情況下,那麼這個單一值就是從.reduce()
呼叫中傳回的值,而您的.reduce()
的回調函數將永遠不會被呼叫: