使用对象扩展运算符添加多个对象(ES6,JavaScript)
作者:互联网
我有3个对象具有相同的数据,但内部数组有单独的服务和提供ID,所以我试图得到预期的结果,如下所述和please check my try here.提前致谢
对象1:
const obj1 = {
bid : 1,
mobile : 9533703390,
services : [
{
service_id : 5,
offer_id : 10,
count : 1
}
]
}
对象2:
const obj2 = {
bid : 1,
mobile : 9524703390,
services : [
{
service_id : 8,
offer_id : 12,
count : 1
}
]
}
对象3:
const obj3 = {
bid : 1,
mobile : 9524703390,
services : [
{
service_id : 5,
offer_id : 10,
count : 1
}
]
}
最终结果 – 每个对象都有单独的服务,然后提供相同的offerid& serviceid需要添加count,否则返回数据
const result = {
bid : 1,
mobile : 9524703390,
services : [
{
service_id : 5,
offer_id : 10,
count : 2
},
{
service_id : 8,
offer_id : 12,
count : 1
}
]
}
解决方法:
您可以使用array#reduce将所有对象合并为单个对象,并使用数组#conters the services values.然后使用array#reduce根据对象中的service_id合并所有服务对象,并将此对象的值重新分配给services.
const obj1 = { bid : 1, mobile : 9533703390, services : [ { service_id : 5, offer_id : 10, count : 1 } ] },
obj2 = { bid : 1, mobile : 9524703390, services : [ { service_id : 8, offer_id : 12, count : 1 } ] },
obj3 = { bid : 1, mobile : 9524703390, services : [ { service_id : 5, offer_id : 12, count : 1 } ] };
var combined = [obj1, obj2, obj3].reduce((r,o) => Object.assign({}, o, {services : r.services.concat(o.services)}));
combined.services = Object.values(combined.services.reduce((res, services) => {
if(res[services.service_id])
res[services.service_id].count += services.count;
else
res[services.service_id] = Object.assign({}, services);
return res;
},{}));
console.log(combined)
标签:javascript,object,ecmascript-6,spread-syntax 来源: https://codeday.me/bug/20190627/1305571.html