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