【问题标题】:add new field in every json object in a array javascript在数组javascript中的每个json对象中添加新字段
【发布时间】:2021-11-01 13:44:12
【问题描述】:

我正在开发一个 react 应用程序,我正在从一个基本上是 JSON 对象列表的路由中获取 JSON 响应。

现在我想根据 JSON 对象中的另一个字段在每个 JSON 对象中添加一个字段:

这是我的回复:

{
  messages: [
    {
      msgId: "2021082111010755885",
      interfaceId: 5,
      status: "QUEUED",
      createdAt: "2021-08-21 11:01:07.89554",
      modifiedAt: "2021-08-21 11:01:07.89554",
      count: 0,
    },
    {
      msgId: "2021082012204615964",
      interfaceId: 5,
      status: "QUEUED",
      createdAt: "2021-08-20 12:20:46.187297",
      modifiedAt: "2021-08-20 12:31:06.622",
      count: 5,
    },
    {
      msgId: "2021082012204575430",
      interfaceId: 5,
      status: "QUEUED",
      createdAt: "2021-08-20 12:20:46.187297",
      modifiedAt: "2021-08-20 12:27:06.473",
      count: 3,
    },
    {
      msgId: "2021082012204613152",
      interfaceId: 5,
      status: "QUEUED",
      createdAt: "2021-08-20 12:20:46.187297",
      modifiedAt: "2021-08-20 12:28:06.517",
      count: 3,
    },
  ];
}

现在我想插入一个名为mString 的字段,它是status+"A",其中状态来自同一个对象。我想将它插入到上述数组中的每个对象中。我该怎么做?

【问题讨论】:

    标签: javascript arrays reactjs json


    【解决方案1】:

    只需循环遍历数组并添加

    const data = {
      "messages": [
        {
          "msgId": "2021082111010755885",
          "interfaceId": 5,
          "status": "QUEUED",
          "createdAt": "2021-08-21 11:01:07.89554",
          "modifiedAt": "2021-08-21 11:01:07.89554",
          "count": 0,
    
        },
        {
          "msgId": "2021082012204615964",
          "interfaceId": 5,
          "status": "QUEUED",
          "createdAt": "2021-08-20 12:20:46.187297",
          "modifiedAt": "2021-08-20 12:31:06.622",
          "count": 5,
    
        },
        {
          "msgId": "2021082012204575430",
          "interfaceId": 5,
          "status": "QUEUED",
          "createdAt": "2021-08-20 12:20:46.187297",
          "modifiedAt": "2021-08-20 12:27:06.473",
          "count": 3,
    
        },
        {
          "msgId": "2021082012204613152",
          "interfaceId": 5,
          "status": "QUEUED",
          "createdAt": "2021-08-20 12:20:46.187297",
          "modifiedAt": "2021-08-20 12:28:06.517",
          "count": 3,
    
        }
      ]
    }
    
    data.messages.forEach((node) => node.mString = node.status + "A");
    
    console.log(data);

    【讨论】:

      【解决方案2】:

      使用 forEach 方法改变您的 JSON 对象。但是如果你有一个巨大的 JSON 在 BE 端改变它,而不是 FE 或使用 Web Workers 来解决这个问题

      const data = {
      "messages": [
      {
      "msgId": "2021082111010755885",
      "interfaceId": 5,
      "status": "QUEUED",
      "createdAt": "2021-08-21 11:01:07.89554",
      "modifiedAt": "2021-08-21 11:01:07.89554",
      "count": 0,
      
      },
      {
      "msgId": "2021082012204615964",
      "interfaceId": 5,
      "status": "QUEUED",
      "createdAt": "2021-08-20 12:20:46.187297",
      "modifiedAt": "2021-08-20 12:31:06.622",
      "count": 5,
      
      },
      {
      "msgId": "2021082012204575430",
      "interfaceId": 5,
      "status": "QUEUED",
      "createdAt": "2021-08-20 12:20:46.187297",
      "modifiedAt": "2021-08-20 12:27:06.473",
      "count": 3,
      
      },
      {
      "msgId": "2021082012204613152",
      "interfaceId": 5,
      "status": "QUEUED",
      "createdAt": "2021-08-20 12:20:46.187297",
      "modifiedAt": "2021-08-20 12:28:06.517",
      "count": 3,
      
      }
      ]
      }
      
      data.messages.forEach(item => { item['mString'] = `${item.status} + A` });
      
      console.log(data);
      

      【讨论】:

      • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
      【解决方案3】:

      在 React 中,我建议通常使用不可变的更新模式,在该模式中,您返回一个包含所需元素对象属性的新数组。这使用Array.prototype.map

      const newData = {
        ...data,
        messages: data.messages.map(el => ({
          ...el,
          mString: el.status + "A",
        })),
      };
      

      const data = {
        messages: [
          {
            msgId: "2021082111010755885",
            interfaceId: 5,
            status: "QUEUED",
            createdAt: "2021-08-21 11:01:07.89554",
            modifiedAt: "2021-08-21 11:01:07.89554",
            count: 0,
          },
          {
            msgId: "2021082012204615964",
            interfaceId: 5,
            status: "QUEUED",
            createdAt: "2021-08-20 12:20:46.187297",
            modifiedAt: "2021-08-20 12:31:06.622",
            count: 5,
          },
          {
            msgId: "2021082012204575430",
            interfaceId: 5,
            status: "QUEUED",
            createdAt: "2021-08-20 12:20:46.187297",
            modifiedAt: "2021-08-20 12:27:06.473",
            count: 3,
          },
          {
            msgId: "2021082012204613152",
            interfaceId: 5,
            status: "QUEUED",
            createdAt: "2021-08-20 12:20:46.187297",
            modifiedAt: "2021-08-20 12:28:06.517",
            count: 3,
          },
        ],
      };
      
      const newData = {
        ...data,
        messages: data.messages.map(el => ({
          ...el,
          mString: el.status + "A",
        })),
      };
      
      console.log(newData);

      【讨论】:

        【解决方案4】:

        我在最后一部分不太了解你,但我认为这就是你想要的

         object.messages.map(element=> {
           element.mystring=el.status + "A"
            return  element
        }))
        

        您需要使用 dot notation 访问 JSON 中的“消息”

        object.messages 是一个数组,您可以在其中映射对象 (map)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-18
          • 2022-06-12
          • 2021-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多