リデュース操作を使用してオブジェクトを操作する
P粉423694341
P粉423694341 2023-08-18 14:05:11
0
1
523
<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>
P粉423694341
P粉423694341

全員に返信(1)
P粉909476457

問題が 2 つあります。1 つ目は、updateDirectHelper 関数が何も返さないことです。この関数には return ステートメントがありますが、実際には reduce(updateClause, [key, value]) => { にネストされたコールバック関数です。 updateDictHelper 自体の代わりに。

もう 1 つの質問は、acc にデフォルト値を指定する方法です。 Reduce は、 オプションの 2 番目のパラメーター をネイティブにサポートしており、これは acc の初期値として使用されます。

リーリー

最良の方法は、可能な限り初期値を指定することです。これを含めない場合、.reduce() はコールバックの最初の呼び出しをスキップし、配列の最初の値に acc を設定してコールバック関数の呼び出しを開始します。 2 番目のパラメータを配列内の 2 番目の値に設定します。あなたの場合のように、配列に値が 1 つだけある場合、この 1 つの値は .reduce() 呼び出しから返される値であり、.reduce() コールバック関数決して呼び出されません:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート