利用reduce操作對物件進行操作
P粉423694341
P粉423694341 2023-08-18 14:05:11
0
1
521
<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>
P粉423694341
P粉423694341

全部回覆(1)
P粉909476457

您有兩個問題,第一個問題是您的updateDirectHelper函數沒有回傳任何內容。雖然在這個函數中有一個return語句,但實際上它是嵌套在reduce的回調函數(updateClause, [key, value]) => { 中,而不是updateDictHelper本身。

您的另一個問題是如何為acc提供預設值。 Reduce原生支援可選的第二個參數,該參數將作為acc的初始值。

reduce(callbackFn, initialValue)

最好的做法是盡可能提供一個初始值。如果您不包含它,.reduce()將跳過回調的第一個調用,並從將acc設為數組中的第一個值開始調用回調函數,並將第二個參數設定為數組中的第二個值。如果您的陣列只有一個值,例如在您的情況下,那麼這個單一值就是從.reduce()呼叫中傳回的值,而您的.reduce()的回調函數將永遠不會被呼叫:

const arrayWithOneElement = [1];
const res = arrayWithOneElement.reduce(() => {
  console.log("I never run");
}); // 注意没有第二个参数
console.log(res);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板