javascript - 组合具有相同键值的 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"
}
}]
}
}]
}
任何帮助深表感谢!蒂亚!!
解决方案
您可以使用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);
这是一个沙盒
推荐阅读
- ios - 根据 Iphone 上的系统时间发送本地通知?
- javascript - 自动完成选项在 React MaterialUI 中没有被删除
- java - 在 Spring 数据 JPA/Hibernate (HQL) 查询中返回具有特定时区的 CURRENT_TIMESTAMP 值?
- docker - 反向代理错误解析 HTTP 404 响应正文背后的 Gitlab 注册表:JSON 输入的意外结束:“”
- c# - EntityTypeBuilder 不包含“导航”的定义
- opentok - PHP Laravel 签名客户端错误:POST https://api.opentok.com/session/create 导致 403 Forbidden
- javascript - React 如何使页面允许向下滚动?
- java - 如何消除在 Windows 上运行的 Java Swing 中的黑色滞后区
- bash - ubuntu 18.04.2上的数字与字母数字排序
- c++ - 可能的 MSVC 编译器错误