首页 > 解决方案 > 组合具有相同键值的 JSON 数组

问题描述

我正在尝试为 OrderLines 数组中的同一 ID 字段组合“scheduleDetails”数组

我尝试使用得到结果的 Groovy,但其中一个数组正在重复,我仍在进行故障排除。我想探索使用 Javascript 是否更容易。

输入:

{
    "orderLines": [{
        "ID": "001",
        "orderedArticle" : {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd001-1"
                    ],
                    "city": "unknown001-1"
                }
            }]
        }
    },
    {
        "ID": "003",
        "orderedArticle" : {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd003-1"
                    ],
                    "city": "unknown003-1"
                }
            }]
        }
    },
    {
        "ID": "001",
        "orderedArticle" : {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd001-2"
                    ],
                    "city": "unknown001-2"
                }
            }]
        }
    },
    {
        "ID": "002",
        "orderedArticle" : {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd002-1"
                    ],
                    "city": "unknown002-1"
                }
            }]
        }
    },
    {
        "ID": "003",
        "orderedArticle" : {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd003-2"
                    ],
                    "city": "unknown003-2"
                }
            }]
        }
    }]
}

输出:

{
    "orderLines": [{
        "ID": "001",
        "orderedArticle": {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd001-1"
                    ],
                    "city": "unknown001-1"
                }
            },
            {
                "address": {
                    "street": [
                        "1234 Unknown blvd001-2"
                    ],
                    "city": "unknown001-2"
                }
            }]
        }
    },
    {
        "ID": "003",
        "orderedArticle": {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd003-1"
                    ],
                    "city": "unknown003-1"
                }
            },
            {
                "address": {
                    "street": [
                        "1234 Unknown blvd003-2"
                    ],
                    "city": "unknown003-2"
                }
            }]
        }
    },
    {
        "ID": "002",
        "orderedArticle": {
            "scheduleDetails": [{
                "address": {
                    "street": [
                        "1234 Unknown blvd002-1"
                    ],
                    "city": "unknown002-1"
                }
            }]
        }
    }]
}

任何帮助深表感谢!蒂亚!!

标签: javascriptarraysjson

解决方案


您可以使用Array.prototype.reduce()以下Object.values()方法来实现此目的:

const oldOrderLinesObj = {
  "orderLines": [{
      "ID": "001",
      "orderedArticle" : {
          "scheduleDetails": [{
              "address": {
                  "street": [
                      "1234 Unknown blvd001-1"
                  ],
                  "city": "unknown001-1"
              }
          }]
      }
  },
  {
      "ID": "003",
      "orderedArticle" : {
          "scheduleDetails": [{
              "address": {
                  "street": [
                      "1234 Unknown blvd003-1"
                  ],
                  "city": "unknown003-1"
              }
          }]
      }
  },
  {
      "ID": "001",
      "orderedArticle" : {
          "scheduleDetails": [{
              "address": {
                  "street": [
                      "1234 Unknown blvd001-2"
                  ],
                  "city": "unknown001-2"
              }
          }]
      }
  },
  {
      "ID": "002",
      "orderedArticle" : {
          "scheduleDetails": [{
              "address": {
                  "street": [
                      "1234 Unknown blvd002-1"
                  ],
                  "city": "unknown002-1"
              }
          }]
      }
  },
  {
      "ID": "003",
      "orderedArticle" : {
          "scheduleDetails": [{
              "address": {
                  "street": [
                      "1234 Unknown blvd003-2"
                  ],
                  "city": "unknown003-2"
              }
          }]
      }
  }]
}

const newOrderLinesObj = {orderLines: Object.values(oldOrderLinesObj.orderLines.reduce((acc, curr) => {
  if(!acc[curr.ID]) {
    acc[curr.ID] = curr
  } else {
    acc[curr.ID].orderedArticle.scheduleDetails.push(...curr.orderedArticle.scheduleDetails)
  }

  return acc;
}, {}))}

console.log(newOrderLinesObj);

这是一个沙盒


推荐阅读