很抱歉这篇冗长的帖子。
需要帮助_聚合(下划线模块)(或任何其他更好的模块或方式)。我在数组中获得了大量的JSON对象,每个对象都有5个值键对:
1) plan, 2) coverageName, 3) serviceName, 4) info, and 5) note.
所以我需要根据'plan','coverageName'和'serviceName'聚合(分组)。
结果是以下格式的JSON对象数组。基本上可以有多个计划,每个计划可以有多个“覆盖”,每个“覆盖”可以有多个“服务”,每个“服务”可以有多个“详细信息”,如JSON结构中所示。
result = [
{
"plan":"Professional",
"coverage": [
{
"name": "Individual",
"service": [
{
"name":"Co-Payment",
"details": [
{
"info"
"note"
},
{
}
] //details aray
},
{
"name":"2nd Payment",
"details": [
{
"info"
"note"
},
{
}
] //details aray
}
] //service array
}
我的示例输入是
var regions = [
{
"plan":"Professional",
"coverageName":"Individual",
"serviceName":"Co-Payment",
"info":"In-Network 10 SPECIALIST",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
},
{
"plan":"Professional",
"coverageName":"Non-Individual",
"serviceName":"Co-Insurance",
"info":"In-Network COMBINED OFFICE VISIT INCLUDES OFFICE, OTHER DIAGNOSTIC, THERAPY, SUBSTANCE ABUSE, MENTAL NERVOUS, MATERNITY",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
},
{
"plan":"Professional - Office",
"coverageName":"Individual",
"serviceName":"Co-Insurance",
"info":"In-Network ",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
},
{
"plan":"nonProfessional - visit",
"coverageName":"Individual",
"serviceName":"Co-Insurance",
"info":"In-Network ",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
},
{
"plan":"nonProfessional - visit",
"coverageName":"Individual",
"serviceName":"Co-Insurance",
"info":"In-Network ",
"note":" Certification/Authorization is not required "
}
]
我试图在我的逻辑中这样做,但我没有取得多大进展
var _ = require('underscore');
var result = _.chain(regions)
.groupBy("plan")
.map(function(value1, key1) {
return _.chain(value1)
.groupBy("coverageName")
.map(function(value2, key2) {
return _.chain(value2)
.groupBy("serviceName")
.map(function (value3, key3) {
console.log ("\n \n value3 " + JSON.stringify(value3));
}).value()
})
.value();
})
.value();
console.log(JSON.stringify(result));
上述输入的输出应该如下所示
[
{
"plan":"Professional",
"coverage": [
{
"name": "Individual",
"service": [
{
"name":"Co-Payment",
"details": [
{
"info":"In-Network 10 SPECIALIST",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}
] //details aray
}
] //service array
},
{
"name": "Non-Individual",
"service": [
{
"name":"Co-Insurance",
"details": [
{
"info":"In-Network COMBINED OFFICE VISIT INCLUDES OFFICE, OTHER DIAGNOSTIC, THERAPY, SUBSTANCE ABUSE, MENTAL NERVOUS, MATERNITY",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}
] //details aray
}] //service array
}] //coverage array
},
{
"plan":"Professional - Office",
"coverage": [{
"name": "Individual",
"service": [{
"name":"Co-Insurance",
"details": [
{
"info":"In-Network ",
"note":" UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}
] //details aray
}] //service array
}]
},
{
"plan":"nonProfessional - visit",
"coverage": [
{
"name": "Individual",
"service": [
{
"name":"Co-Insurance",
"details": [
{
"info":"In-Network ",
"note":" Certification/Authorization is not required "
}
] //details aray
}
] //service array
}
] //coverage
}
]
答案 0 :(得分:1)
我不知道这是不是真的答案。
var regions = [{
"plan": "Professional",
"coverageName": "Individual",
"serviceName": "Co-Payment",
"info": "In-Network 10 SPECIALIST",
"note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}, {
"plan": "Professional",
"coverageName": "Non-Individual",
"serviceName": "Co-Insurance",
"info": "In-Network COMBINED OFFICE VISIT INCLUDES OFFICE, OTHER DIAGNOSTIC, THERAPY, SUBSTANCE ABUSE, MENTAL NERVOUS, MATERNITY",
"note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}, {
"plan": "Professional - Office",
"coverageName": "Individual",
"serviceName": "Co-Insurance",
"info": "In-Network ",
"note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}, {
"plan": "nonProfessional - visit",
"coverageName": "Individual",
"serviceName": "Co-Insurance",
"info": "In-Network ",
"note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "
}, {
"plan": "nonProfessional - visit",
"coverageName": "Individual",
"serviceName": "Co-Insurance",
"info": "In-Network ",
"note": " Certification/Authorization is not required "
}];
var outObj = {};
regions.forEach(rg => {
var plan = rg.plan,
coverage = rg.coverageName,
service = rg.serviceName
if (!outObj[plan])
outObj[plan] = {
plan: plan,
coverage: {}
};
plan = outObj[plan];
if (!plan.coverage[coverage])
plan.coverage[coverage] = {
name: coverage,
service: {}
};
coverage = plan.coverage[coverage];
if (!coverage.service[service])
coverage.service[service] = [];
service = coverage.service[service];
service.push({
info: rg.info,
note: rg.note
});
});
function _getServices(coverage) {
return Object.keys(coverage.service).map(srvName => ({
name: srvName,
details: coverage[srvName]
}));
}
function _getCoverage(plan) {
return Object.keys(plan.coverage).map(cvrName => {
var coverage = plan.coverage[cvrName]
return {
name: cvrName,
service: _getServices(coverage)
};
});
}
var out = Object.keys(outObj).map(planName => {
var plan = outObj[planName];
return {
name: planName,
coverage: _getCoverage(plan)
}
});
console.log(out);
答案 1 :(得分:1)
我认为这可能是我之前实现的Underscore
版本。
如果你想玩,BTW这里是jsfiddle。 ;)
var regions = [
{ "plan": "Professional", "coverageName": "Individual", "serviceName": "Co-Payment", "info": "In-Network 10 SPECIALIST", "note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "},
{ "plan": "Professional", "coverageName": "Non-Individual", "serviceName": "Co-Insurance", "info": "In-Network COMBINED OFFICE VISIT INCLUDES OFFICE, OTHER DIAGNOSTIC, THERAPY, SUBSTANCE ABUSE, MENTAL NERVOUS, MATERNITY", "note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "},
{ "plan": "Professional - Office", "coverageName": "Individual", "serviceName": "Co-Insurance", "info": "In-Network ", "note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "},
{ "plan": "nonProfessional - visit", "coverageName": "Individual", "serviceName": "Co-Insurance", "info": "In-Network ", "note": " UM PROGRAM INFORMATION IS NOT CURRENTLY AVAILABLE "},
{ "plan": "nonProfessional - visit", "coverageName": "Individual", "serviceName": "Co-Insurance", "info": "In-Network ", "note": " Certification/Authorization is not required "}];
var getServiceInfo = group => _.chain(group)
.map((v, k) => {
var result = {
info: v.info,
note: v.note
};
return result;
});
var getService = group => _.chain(group)
.groupBy('serviceName').map((v, k) => {
var result = {
name: k,
details: getServiceInfo(v)
};
return result;
});
var getCoverage = group => _.chain(group)
.groupBy('coverageName').map((v, k) => {
var result = {
name: k,
service: getService(v)
};
return result;
});
var wrappedObject = _.chain(regions)
.groupBy('plan').map((v, k) => {
var result = {
plan: k,
coverage: getCoverage(v)
}
return result;
});
var result = JSON.parse(JSON.stringify(wrappedObject));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>