首页 > 解决方案 > 如何将对象数组作为键值对推送到数组中

问题描述

假设我从这样的 API 获取 JSON

lineItem = {
  "rows": {
    "10010": [
      {
        "id": "[10010,1,1]",
        "po_item": 10010,
        "schedule_no": 1,
        "chainage_no": 1
      },
      {
        "id": "[10010,2,1]",
        "po_item": 10010,
        "schedule_no": 2,
        "chainage_no": 1
      }
    ],
    "10020": [
      {
        "id": "[10020,1,1]",
        "po_item": 10020,
        "schedule_no": 1,
        "chainage_no": 1
      },
      {
        "id": "[10020,2,1]",
        "po_item": 10020,
        "schedule_no": 2,
        "chainage_no": 1
      }
    ]
  }
}

我需要填充如下所示的数组,

resultArray = [
  "10010": [
      {
          "id": "[10010,1,1]",
          "status": 0
      },
      {
          "id": "[10010,2,1]",
          "status": 0
      }
  ],
  "10020": [
      {
          "id": "[10020,1,1]",
          "status": 0
      },
      {
          "id": "[10020,2,1]",
          "status": 0
      }
  ]
]

我尝试过以下方法

Object.keys(this.lineItem.rows).map(key => {
  this.resultArray[key] = [];

  this.lineItem.rows[key].map(item => {
    this.resultArray[key].push({ id: item.id, status: 0 });
  });
  
});

但我得到的结果如下所示,但元素为空

(10021) [empty × 10010, Array(2), empty × 9, Array(2)]
10010: (2) [{…}, {…}]
10020: (2) [{…}, {…}]
length: 10021
__proto__: Array(0)

在这里您可以看到空 x 10010 和空 x 9。当我尝试将 resultArray 作为有效负载发送到 API 时,它会添加 10019 null,然后添加两个数组。

标签: javascriptarrays

解决方案


let lineItem = {
  "rows": {
    "10010": [
      {
        "id": "[10010,1,1]",
        "po_item": 10010,
        "schedule_no": 1,
        "chainage_no": 1
      },
      {
        "id": "[10010,2,1]",
        "po_item": 10010,
        "schedule_no": 2,
        "chainage_no": 1
      }
    ],
    "10020": [
      {
        "id": "[10020,1,1]",
        "po_item": 10020,
        "schedule_no": 1,
        "chainage_no": 1
      },
      {
        "id": "[10020,2,1]",
        "po_item": 10020,
        "schedule_no": 2,
        "chainage_no": 1
      }
    ]
  }
};

let resultArray=Object.entries(lineItem.rows)
.map(([key,value])=>({[key]:value.map(v=>({id:v.id,status:0}))}));


console.log(resultArray);


推荐阅读