【问题标题】:Javascript How to push a key value pair into a nested object arrayJavascript如何将键值对推送到嵌套对象数组中
【发布时间】:2021-10-28 06:36:53
【问题描述】:

我有这个 JSON 响应,我想在嵌套菜单数组中推送 "status": "pending",请帮助我如何在 Javascript 中实现这一点。

[
{
    "id": 1,
    "status": "pending",
    "menues": [
        {
            "title": "Coke",
            "price": "200"
        }
    ]
},
{
    "id": 2,
    "status": "delivered",
    "menues": [
        {
            "title": "Pepsi",
            "price": "120"
        }
    ]
}
]

这是我想要实现的目标: 我只想在菜单数组中推送 Staus 键/值

[
{
    "id": 1,
    "menues": [
        {
            "title": "Coke",
            "price": "200",
            "status": "pending",
        }
    ]
},
{
    "id": 2,
    "menues": [
        {
            "title": "Pepsi",
            "price": "120",
            "status": "delivered",
        }
    ]
}
] 

【问题讨论】:

  • 你试过什么方法?

标签: javascript arrays reactjs json


【解决方案1】:

您可以查看数组,对于每个项目,查看menues 中的项目。使用forEach 方法,这甚至可以作为单个语句完成:

arr = [
  {
      "id": 1,
      "status": "pending",
      "menues": [
          {
              "title": "Coke",
              "price": "200"
          }
      ]
  },
  {
      "id": 2,
      "status": "delivered",
      "menues": [
          {
              "title": "Pepsi",
              "price": "120"
          }
      ]
  }
];

arr.forEach(nested => {
    nested.menues.forEach(menu => menu.status = nested.status);
    delete nested.status
});
console.log(arr);

【讨论】:

  • 如果有多个状态,比如他还有另一个“状态”:“已交付”,那么总是要运行多个循环呢?
  • @hamzaliaqat no - 只需将逻辑放入内部 forEach 以决定分配什么 status
  • @Mureinik 我认为 OP 在对象本身中具有所需的状态,我们只想在遍历循环时将其推入数组
  • @kevmc 哦,确实!我完全错过了那里的简报。已编辑和修复。
  • @hamzaliaqat 我误读了这个问题。感谢 kevmc 指出这一点,我已经编辑了我的答案以提供所需的功能。
【解决方案2】:

也许这就是你想要的?以下脚本创建了一个新的嵌套数组结构,而原始的保持不变。我没有从外部对象中删除 status 属性,而是将新创建的对象中的属性创建限制为 idmenues

我更改了此答案以响应 OP 要求 ES5 和 ES6 方法以及 ... 运算符的评论。

arr = [
  {
      "id": 1,
      "status": "pending",
      "menues": [
          {
              "title": "Coke",
              "price": "200"
          }
      ]
  },
  {
      "id": 2,
      "status": "delivered",
      "menues": [
          {
              "title": "Pepsi",
              "price": "120"
          }
      ]
  }
];

const res=arr.map(nested =>({ id:nested.id, menues:
  nested.menues.map(menu =>({...menu,status:nested.status})) }));
console.log(res);

【讨论】:

  • ES5 或 ES6 是否可行?像扩展运算符和映射方法一样?
  • 请再检查一遍,我改了答案。
  • 非常感谢,当我使用 forEach 循环应用第一个解决方案时出现问题,但现在它运行完美并节省了我的时间,再次感谢您的宝贵回答
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2020-06-21
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多