javascript - 如何基于 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 中实现此功能。
解决方案
您可以使用reduce
和Object.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
作为键的对象。拆分Status
at"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"
}
}
(请确保您有有效的输入数据。缺少逗号和引号。我不确定我的代码或输入是否有问题。)
推荐阅读
- rust - 统一 futures::future::map::Map 和 futures::future::result_::FutureResult
- java - 从 Spring Boot 执行 Neo4j 密码查询
- java - 使用 Selenium 单例驱动程序类是常见的做法吗?
- java - 每个 JVM 实例的 Java 最大速度是否达到 4Gbps 左右?
- mysql - 紧凑():未定义的变量:用户
- r - 使用 dplyr 将 hpfilter 应用于具有 NA 的分组变量
- c - C函数多重定义错误但声明一次?
- java - 为什么每当遵守 datepicker1.setValue() 时 JavaFx datepicker1.setOnAction 事件就会触发?
- php - php cron 作业未运行,Amzonz EC2,bitnami
- ios - 如何使用委托将数据从一个视图控制器传递到另一个视图控制器?