リデュース操作を使用してオブジェクトを操作する
P粉423694341
P粉423694341 2023-08-18 14:05:11
0
1
457

これは私の入力です:{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 については非常に初心者なので、助けていただければ幸いです。

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
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!