使用map和reduce(如果可能)javascript对动态JSON键进行分组
我想对json的动态对象键进行分组。每个关键点的对象值将分组到各自的关键点 我尝试使用map和reduce对其进行分组,但结果并没有按预期进行分组 这是我的JSON对象使用map和reduce(如果可能)javascript对动态JSON键进行分组,javascript,json,ecmascript-6,Javascript,Json,Ecmascript 6,我想对json的动态对象键进行分组。每个关键点的对象值将分组到各自的关键点 我尝试使用map和reduce对其进行分组,但结果并没有按预期进行分组 这是我的JSON对象 var data = [ { "type": 6, "data": { "error": { "cause": { "root": { "Extracted": { "Body": {
var data = [
{
"type": 6,
"data": {
"error": {
"cause": {
"root": {
"Extracted": {
"Body": {
"Error": {
"ErrorCode": "143",
"ErrorString": "NotFound",
"info": {
"Error": {
"errorDesc": "Data Not Found",
"subs": {
"attrib": {
"subs_name": "123com",
"subs_no": 4
}
}
}
}
}
}
}
}
}
}
},
"status": true
},
{
"type": 6,
"data": {
"error": {
"cause": {
"root": {
"Extracted": {
"Body": {
"Error": {
"ErrorCode": "143",
"ErrorString": "NotFound",
"info": {
"Error": {
"errorDesc": "Company Not Found",
"subs": {
"attrib": {
"subs_name": "QRS",
"subs_no": 4
}
}
}
}
}
}
}
}
}
}
},
"status": true
},
{
"type": 6,
"data": {
"error": {
"cause": {
"root": {
"Extracted": {
"Body": {
"Error": {
"ErrorCode": "123",
"ErrorString": "SystemFailure",
"info": {
"Error": {
"errorDesc": "Internal server error",
"subs": {
"attrib": {
"subs_name": "ABC",
"subs_no": 2
}
}
}
}
}
}
}
}
}
}
},
"status": true
},
{
"type": 6,
"data": {
"error": {
"cause": {
"root": {
"Extracted": {
"Body": {
"Error": {
"ErrorCode": "123",
"ErrorString": "SystemFailure",
"info": {
"Error": {
"errorDesc": "Insufficient Data",
"subs": {
"attrib": {
"subs_name": "DEF",
"subs_no": 3
}
}
}
}
}
}
}
}
}
}
},
"status": true
},
{
"type": 6,
"data": {
"error": {
"cause": {
"root": {
"Extracted": {
"Body": {
"Error": {
"ErrorCode": "999",
"ErrorString": "Unknown",
"info": {
"Unknown": {
"desc": "UnknownError",
"subs": "GHI"
}
}
}
}
}
}
}
}
}
},
"status": true
}
]
这是我尝试过的代码,但没有得到我想要的结果
var x = data.map((e) => {
var el = {}
el[e.data.error.cause.root.Extracted.Body.Error.ErrorString] =
[e.data.error.cause.root.Extracted.Body.Error.info];
return el;
})
console.log(x);
我得到的结果是:
[
{
"NotFound": {....}
},
{
"NotFound": {....}
},
{
"SystemFailure": {....}
},
{
"SystemFailure": {....}
},
{
"Unknown": {....}
},
]
我预期的结果是:
[
{
"NotFound": [
{
"Error": {
"errorDesc": "Data Not Found",
"subs": {
"attrib": {
"subs_name": "123com",
"subs_no": 4
}
}
},
{
"Error": {
"errorDesc": "Company Not Found",
"subs": {
"attrib": {
"subs_name": "QRS",
"subs_no": 4
}
}
}
}
]
},
{
"SystemFailure": [
{
"Error": {
"errorDesc": "Internal server error",
"subs": {
"attrib": {
"subs_name": "ABC",
"subs_no": 2
}
}
},
{
"Error": {
"errorDesc": "Insufficient Data",
"subs": {
"attrib": {
"subs_name": "DEF",
"subs_no": 3
}
}
}
]
},
{
"Unknown": [
{
"Unknown": {
"desc": "UnknownError",
"subs": "GHI"
}
}
]
}
]
您可以
减少
数组。使用唯一的ErrorString
键创建累加器对象。将值设置为与键具有相同ErrorString
的对象。然后根据ErrorString
添加每个info
对象。使用“获取分组值作为数组”
const data=[{type:6,data:{error:{原因:{root:{Extracted:{Body:{error:{143],ErrorString:“NotFound”,info:{error:{error:{error:{未找到数据,{attrib:{subsu name:“123com”,subsu no:4}}}}}}}}}}}}},状态:true},{type:6,数据:{错误:{原因:{提取:{Body:{error:{错误:{Body:{error:{错误:{founded:{Found Found Found Found Found Found Found Found“未找到公司”,subs:{attrib:{subs_name:“QRS”,subs_no:4}}}}},状态:true},{type:6,数据:{error:{restracted:{Body:{error:{error:“123”,ErrorString:“SystemFailure”,信息:{errorDesc Internal server error:{error:“内部服务器错误”,subs:{attrib:{subs:{subs:{subs:{subs_name:“ABC”,subs:{attrib:{no:2},状态:Extracted Body:{error:},数据类型:true:},错误:{{Error:{ErrorCode:“123”,ErrorString:“SystemFailure”,info:{Error:{errorDesc:{errorDesc:“数据不足”,subs:{attrib:{subs:”DEF”,subs:{subs:”no:3}}}}}}},status:true},{type:6,Data:{Error:{原因:{根:{提取:{Body:{Error:{Error:{ErrorCode:“999”,ErrorString:“未知”,info:{未知:{desc Unknown:{状态:},subs:{GHI:},状态:}true};
const merged=data.reduce((acc,o)=>{
const e=o.data.error.cause.root.Extracted.Body.error;
acc[e.ErrorString]=acc[e.ErrorString]|{[e.ErrorString]:[]};
acc[e.ErrorString][e.ErrorString]。推送(e.info)
返回acc;
}, {})
常量输出=对象值(合并);
console.log(output)
谢谢@adiga!你能给我解释一下每行代码是如何工作的吗?通过对代码的评论?我对如何在json中使用reduce并不太熟悉。