これは私の入力です:{field1: {field2:'123', field3:{field4:'123'}}}
ターゲットは次のとおりです:{field1: {update: {field2:'123', field3: {update: {field4:'123'}}
これは私が試したことです:
function updateDictHelper(obj) { Object.entries(obj).reduce((updateClause = {}, [キー, 値]) => { if (値の型 !== 'オブジェクト') { return {... updateClause, [key]: value} } それ以外 { return {... updateClause, [key]: {update: updateDictHelper(value)}} } }) }
しかし、どうやってもうまくいきません。私は Java/TypeScript については非常に初心者なので、助けていただければ幸いです。
問題が 2 つあります。1 つ目は、
updateDirectHelper
関数が何も返さないことです。この関数にはreturn
ステートメントがありますが、実際にはreduce
(updateClause, [key, value]) => {
にネストされたコールバック関数です。updateDictHelper
自体の代わりに。もう 1 つの質問は、
リーリーacc
にデフォルト値を指定する方法です。 Reduce は、オプションの 2 番目のパラメーターをネイティブにサポートしており、これはacc
の初期値として使用されます。最良の方法は、可能な限り初期値を指定することです。これを含めない場合、
.reduce()
はコールバックの最初の呼び出しをスキップし、配列の最初の値にacc
を設定してコールバック関数の呼び出しを開始します。 2 番目のパラメータを配列内の 2 番目の値に設定します。あなたの場合のように、配列に値が 1 つだけある場合、この 1 つの値は.reduce()
呼び出しから返される値であり、.reduce()
コールバック関数決して呼び出されません: