本文介绍了使用Angular 4 Pipes或Rxjs运算符在对象数组(json)中分组/加和属性值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
http调用的响应是这样的公司对象数组:
The response from my http call is an array of company objects like this:
response = [{
"name": "CompanyName1",
"registrations": [
{
"country": "en",
"register": "registerType1",
"amount": 2
},
{
"country": "wa",
"register": "registerType2",
"amount": 1
},{
"country": "en",
"register": "registerType1",
"amount": 3
},
{
"country": "sc",
"register": "registerType3",
"amount": 2
},
{
"country": "wa",
"register": "registerType3",
"amount": 2
}
]
},
{
"name": "CompanyName2",
"registrations": [
{
"country": "wa",
"register": "registerType1",
"amount": 3
},
{
"country": "sc",
"register": "registerType3",
"amount": 1
}
]]
如果registerType1 ||,我需要按寄存器和国家/地区将公司的注册分组/汇总为新的propertyName(registerType_12). registerType2否则保留属性名称registerTypeN.那是针对companyName1的,我需要得到这样的结果:
I need to group/sum company's registrations by register and country into a new propertyName (registerType_12) if registerType1 || registerType2 otherwise just keep property name registerTypeN. that is for companyName1 I need to get a result like this:
CompanyName1: [{country:en, registerType_12, amount:5},
{country:wa, registerTyoe_12, amount:1,
{country:sc, registerType3, amount:4}
}]
推荐答案
您不需要打字稿或rxjs.可以使用纯JavaScript来实现.
You don't need typescript or rxjs for this. It can be achieved with pure javascript.
JSBin链接: https://jsbin.com/yujocofesu/edit?js,console
response.reduce((finalObj, obj)=>{
finalObj[obj.name] =
obj.registrations
.map(reg => Object.assign(reg,
{register: (
reg.register ==='registerType1'||
reg.register==='registerType2') ?
'registerType_12': reg.register
})
)
.reduce(mergeSimilar, []);
return finalObj;
},{});
function mergeSimilar(newList, item){
let idx = newList.findIndex(
i=> i.country === item.country && i.register === item.register);
if(idx>-1){
newList[idx].amount += item.amount;
}else{
newList.push(item)
}
return newList;
}
此响应为
{
CompanyName1: [{
amount: 5,
country: "en",
register: "registerType_12"
}, {
amount: 1,
country: "wa",
register: "registerType_12"
}, {
amount: 2,
country: "sc",
register: "registerType3"
}, {
amount: 2,
country: "wa",
register: "registerType3"
}],
CompanyName2: [{
amount: 3,
country: "wa",
register: "registerType_12"
}, {
amount: 1,
country: "sc",
register: "registerType3"
}]
}
这篇关于使用Angular 4 Pipes或Rxjs运算符在对象数组(json)中分组/加和属性值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!