首页 > 解决方案 > 如何基于 2 个键合并数组对象?

问题描述

这是我的代码

var array = [{
    OrderId: "L01",
    Location: "London"
    Qty: "6.00",
    Status: "Product A
  },
  {
    OrderId: "L01",
    Location: "London"
    Qty: "2.00"
    Status: "Product B"
  },
  {
    OrderId: "L01",
    Location: "London"
    Qty: "3.00"
    Status: "Product C"
  },
  {
    OrderId: "P01",
    Location: "Paris"
    Qty: "7.00"
    Status: "Product A"
  },
  {
    OrderId: "P01",
    Location: "Paris"
    Qty: "4.00"
    Status: "Product B"
  },
  {
    OrderId: "P01",
    Location: "Paris"
    Qty: "9.00"
    Status: "Product C"
  }
];

我想将此数组转换为

var arrayModified = [{
    OrderId: "L01",
    Location: "London"
    QtyA: "6.00",
    QtyB: "2.00,
    QtyC: "3.00
  },
  {
    OrderId: "P01",
    Location: "London"
    Qty: A "7.00",
    QtyB: "4.00",
    QtyC: "9.00"
  }
];

基本上我想检查名为状态的变量,并基于此创建新字段 QtyA、QtyB、QtyC。OrderId 和 Plant 是常见且独特的字段。

如何在没有 Jquery 和 Lodash 的普通 JS 中实现此功能。

标签: javascriptarrays

解决方案


您可以使用reduceObject.values

var array = [{OrderId:"L01",Location:"London",Qty:"6.00",Status:"Product A"},{OrderId:"L01",Location:"London",Qty:"2.00",Status:"Product B"},{OrderId:"L01",Location:"London",Qty:"3.00",Status:"Product C"},{OrderId:"P01",Location:"Paris",Qty:"7.00",Status:"Product A"},{OrderId:"P01",Location:"Paris",Qty:"4.00",Status:"Product B"},{OrderId:"P01",Location:"Paris",Qty:"9.00",Status:"Product C"}];

const merged = array.reduce((r,{OrderId, Location, Status, Qty}) => {
  const [p,suffix] = Status.split("Product ")
  r[OrderId] = r[OrderId] || {OrderId, Location};
  r[OrderId]["Qty"+suffix] =  Qty;
  return r;
},{})

const output = Object.values(merged)

console.log(output)

目标是创建一个accumulator以每个唯一OrderId作为键的对象。拆分Statusat"Product "并使用解构suffix从变量中的结果数组中获取第二项。(或者您可以简单地使用替换:)var suffix = Status.replace("Product ", "")。然后使用Object.values来获取这个对象的值到一个数组中。

merged/累加器看起来像这样:

{
  "L01": {
    "OrderId": "L01",
    "Location": "London",
    "QtyA": "6.00",
    "QtyB": "2.00",
    "QtyC": "3.00"
  },
  "P01": {
    "OrderId": "P01",
    "Location": "Paris",
    "QtyA": "7.00",
    "QtyB": "4.00",
    "QtyC": "9.00"
  }
}

(请确保您有有效的输入数据。缺少逗号和引号。我不确定我的代码或输入是否有问题。)


推荐阅读