ホームページ  >  に質問  >  本文

リデュース操作を使用してオブジェクトを操作する

<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粉423694341P粉423694341429日前486

全員に返信(1)返信します

  • P粉909476457

    P粉9094764572023-08-19 12:39:09

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

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

    リーリー

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

    リーリー

    返事
    0
  • キャンセル返事