首页 > 解决方案 > 如何更新js中的嵌套对象数组?

问题描述

我需要修改具有内部数组对象的组件状态。修改对象数组没有问题,但我想更新具有动作格式的内部对象数组值。它不会将操作值更新为"No Action Needed"。这些功能有什么问题?提前致谢。map()

let example_response = {
  data: [
    {
 
      details: [
        {
          format: "date",
          value: "2020-04-29T15:03:44.871Z",
          title: "Date"
        },
        {
          format: "action",
          value: "-",
          title: "Action"
        }
      ],
      id: 13409,
      isSelected:true
    },   {
 
      details: [
        {
          format: "date",
          value: "2019-04-29T15:03:44.871Z",
          title: "Date"
        },
        {
          format: "action",
          value: "-",
          title: "Action"
        }
      ],
      id: 13409,
      isSelected:false
    }
  ]
};
 const newList = example_response.data.map((item) => {
    if (item.isSelected) {
      item.details.map((elem) => {
        if (elem.format === "action") {
          const updatedElem = {
            ...elem,
            value: "No Action Needed"
          };
          return updatedElem;
        }       
      });
    }
    return item;
  });
console.log(newList);

标签: javascriptarraysreactjsecmascript-6

解决方案


我发现了2个问题:

  1. 你没有修改item.details(你只是映射它)。
  2. 你只在什么时候返回updatedElemelem.format === "action"但你在其他情况下返回任何东西

尝试

let example_response = {
  data: [{

    details: [{
        format: "date",
        value: "2020-04-29T15:03:44.871Z",
        title: "Date"
      },
      {
        format: "action",
        value: "-",
        title: "Action"
      }
    ],
    id: 13409,
    isSelected: true
  }, {

    details: [{
        format: "date",
        value: "2019-04-29T15:03:44.871Z",
        title: "Date"
      },
      {
        format: "action",
        value: "-",
        title: "Action"
      }
    ],
    id: 13409,
    isSelected: false
  }]
};
const newList = example_response.data.map((item) => {
  if (item.isSelected) {
    item.details = item.details.map((elem) => {
      if (elem.format === "action") {
        elem.value = "No Action Needed";
      }
      return elem;
    });
  }
  return item;
});
console.log(newList);


推荐阅读