簡體   English   中英

如何更新深度嵌套的對象數組?

[英]How to update deeply nested array of objects?

我有以下嵌套的對象數組:

const data = [
  {
    product: {
      id: "U2NlbmFyaW9Qcm9swkdWN0OjEsz",
      currentValue: 34300,
    },
    task: {
      id: "R2VuZXJpY1Byb2R1Y3Q6MTA",
      name: "My Annuity",
    },
    instrumentDetails: [
      {
        instrument: {
          id: "U2NlbmFyaW9JbnN0cnVtZW50OjEz",
          supplier: {
            id: "U3VwcGxpZXJJbnN0cnVtZW50OjUzNjQ",
            supplierDetails: {
              name: "Local - Class A",
            },
          },
          currentValue: 44323,
        },
        assets: {
          current: 1.2999270432626702,
          fixed: 0.5144729302004819,
          financial: 0.0723506386331588,
          cash: 0.00006003594786398524,
          alternative: 0.05214078143244779,
          property: 0.548494862567579,
          local: 0.10089348539739094,
          global: 0,
        },
      },
    ],
  },
  {
    product: {
      id: "U2NlbmFyaW9Qcm9swkfefewdWN0OjEsz",
      currentValue: 3435300,
    },
    task: {
      id: "R2VuZXJpYfewfew1Byb2R1Y3Q6MTA",
      name: "Living",
    },
    instrumentDetails: [
      {
        instrument: {
          id: "U2NlbmFyadewwW9JbnN0cnVtZW50OjEz",
          supplier: {
            id: "U3VwcGxpZdwdwXJJbnN0cnVtZW50OjUzNjQ",
            supplierDetails: {
              name: "Local - Class B",
            },
          },
          currentValue: 434323,
        },
        assets: {
          current: 1.294353242,
          fixed: 0.514434242004819,
          financial: 0.07434286331588,
          cash: 0.0000434398524,
          alternative: 0.05242348143244779,
          property: 0.543242567579,
          local: 0.100432439739094,
          global: 0,
        },
      },
    ],
  },
];

上述數據顯示了一系列產品,這些產品由 instrumentDetails 數組中描述的工具組成。 我正在嘗試按供應商 ID 查找工具,並通過將所有資產值乘以給定數字來更新其資產。

這是我的 function:

export const updateObject = (
  productsArr: any,
  supplierInstrumentId: string
) => {
  return productsArr.map(
    (product: any) => {
      product.instrumentDetails.map(
        (instrumentDetail: any) => {
          if (
            instrumentDetail.instrument.supplier.id ===
            supplierInstrumentId
          ) {
            instrumentDetail.assets.current = instrumentDetail.assets.current + 5;
            instrumentDetail.assets.fixed= instrumentDetail.assets.fixed+ 5;
            instrumentDetail.assets.financial= instrumentDetail.assets.financial+ 5;
            instrumentDetail.assets.cash= instrumentDetail.assets.cash+ 5;
          }
        }
      );
    }
  );
};

此 function 給出錯誤:

未捕獲的類型錯誤:無法分配給 object '#' 的只讀屬性“當前”

如何深度更新上述數據? 請幫忙。

您需要從 map function 退回一個新的儀器詳細類型 object。 不要嘗試更新現有的 object。

 (instrumentDetail: any) => { const assets = instrumentDetail.instrument.supplier.id === supplierInstrumentId? Object.fromEntries( Object.entries(instrumentDetail.assets).map(([k, v]) => [k, v + 5]) ): instrumentDetail.assets; return {...instrumentDetail, assets }; }

您的產品 map 沒有返回,這就是您可能得到未定義的原因。 我沒有收到您上面提到的 typescript 錯誤。 這應該將陣列留在您想要的 state 中。

const updateObject = (
  productsArr: any,
  supplierInstrumentId: string
) => {
  return productsArr.map(
    (product: any) => {
      product.instrumentDetails.map(
        (instrumentDetail: any) => {
          if (
            instrumentDetail.instrument.supplier.id ===
            supplierInstrumentId
          ) {
            instrumentDetail.assets.current += 5;
            instrumentDetail.assets.fixed= instrumentDetail.assets.fixed+ 5;
            instrumentDetail.assets.financial= instrumentDetail.assets.financial+ 5;
            instrumentDetail.assets.cash= instrumentDetail.assets.cash+ 5;
            return instrumentDetail;
          }
        }
      );
      return product;
    }
  );
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM