Javascript 如何对数组中的相同对象求和
如果数组的值相同,则可以求和,如下所示:Javascript 如何对数组中的相同对象求和,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,如果数组的值相同,则可以求和,如下所示: var COLLECTION = [ { "coords":[1335,2525], "items":[ {id: "boletus",qty: 1}, {id: "lepiota",qty: 3}, {id: "boletus",qty: 2}, {id: "lepiota",qty: 4}, {id: "carbonite",qty: 4}, ], },
var COLLECTION = [
{
"coords":[1335,2525],
"items":[
{id: "boletus",qty: 1},
{id: "lepiota",qty: 3},
{id: "boletus",qty: 2},
{id: "lepiota",qty: 4},
{id: "carbonite",qty: 4},
],
},
{
"coords":[1532,2889],
"items":[
{id: "boletus",qty: 2},
{id: "lepiota",qty: 6},
{id: "boletus",qty: 1},
{id: "lepiota",qty: 4},
{id: "chamomile",qty: 4},
],
}]
var COLLECTION = [
{
"coords":[1335,2525],
"items":[
{id: "boletus",qty: 3},
{id: "lepiota",qty: 7},
{id: "carbonite",qty: 4},
],
},
{
"coords":[1532,2889],
"items":[
{id: "boletus",qty: 3},
{id: "lepiota",qty: 10},
{id: "chamomile",qty: 4},
],
}]
要返回如下内容:
var COLLECTION = [
{
"coords":[1335,2525],
"items":[
{id: "boletus",qty: 1},
{id: "lepiota",qty: 3},
{id: "boletus",qty: 2},
{id: "lepiota",qty: 4},
{id: "carbonite",qty: 4},
],
},
{
"coords":[1532,2889],
"items":[
{id: "boletus",qty: 2},
{id: "lepiota",qty: 6},
{id: "boletus",qty: 1},
{id: "lepiota",qty: 4},
{id: "chamomile",qty: 4},
],
}]
var COLLECTION = [
{
"coords":[1335,2525],
"items":[
{id: "boletus",qty: 3},
{id: "lepiota",qty: 7},
{id: "carbonite",qty: 4},
],
},
{
"coords":[1532,2889],
"items":[
{id: "boletus",qty: 3},
{id: "lepiota",qty: 10},
{id: "chamomile",qty: 4},
],
}]
阵列的其他部分不会丢失吗?
(手工操作很难,因为我有10000多个重复项,如上面的示例,数组有60万个条目。您可以使用map()
创建新数组,并在reduce()
中按id和数量总和对项
对象进行分组
[代码>var数据=<代码>var数据=[{“合作者”的代码>var数据..var数据数据..变异数据数据..变异数据数据..变异数据数据....变异数据.变异数据..数据....数据..数据.数据..数据..数据.数据...数据.数据....数据.......数据..数据.....数据..数据.数据....数据....数据.......数据.....数据...数据.数据.......数据....数据....数据.....数据.......数据.......数据.....数据......数据........数据.....数据......数据....数据
const result=data.map(函数({coords,items}){
返回{coords,items:Object.values(items.reduce)(函数(r,e){
如果(!r[e.id])r[e.id]=Object.assign({},e)
else r[e.id]。数量+=e.qty
返回r;
}, {}))}
})
console.log(result)您可以使用map()
创建新数组,并在reduce()
中按id和数量总和对项
对象进行分组
[代码>var数据=<代码>var数据=[{“合作者”的代码>var数据..var数据数据..变异数据数据..变异数据数据..变异数据数据....变异数据.变异数据..数据....数据..数据.数据..数据..数据.数据...数据.数据....数据.......数据..数据.....数据..数据.数据....数据....数据.......数据.....数据...数据.数据.......数据....数据....数据.....数据.......数据.......数据.....数据......数据........数据.....数据......数据....数据
const result=data.map(函数({coords,items}){
返回{coords,items:Object.values(items.reduce)(函数(r,e){
如果(!r[e.id])r[e.id]=Object.assign({},e)
else r[e.id]。数量+=e.qty
返回r;
}, {}))}
})
console.log(结果)您可以使用函数和 这种方法对原始数组进行变异
var COLLECTION=[{“coords”:[1335225],“items”:[{id:“boletus”,数量:1},{id:“boletus”,数量:3},{id:“boletus”,数量:2},{id:“lepiota”,数量:4},{id:“carbonite”,数量:4},},{“coords”:[15322889],“items:[{id:“boletus”,数量:2},{id:“lepiota”,数量:6,{id:“boletus”,数量:1},{id:“lepiota”,数量:4},{id:“洋甘菊”,数量:4},],}];
COLLECTION.forEach((o)=>{
o、 项目=对象值(o.items.reduce((a,c)=>{
(a[c.id]| |(a[c.id]={id:c.id,数量:0})).qty+=c.qty;
返回a;
}, {}));
});
console.log(集合);
。作为控制台包装{最大高度:100%!重要;顶部:0;}
您可以使用函数和
这种方法对原始数组进行变异
var COLLECTION=[{“coords”:[1335225],“items”:[{id:“boletus”,数量:1},{id:“boletus”,数量:3},{id:“boletus”,数量:2},{id:“lepiota”,数量:4},{id:“carbonite”,数量:4},},{“coords”:[15322889],“items:[{id:“boletus”,数量:2},{id:“lepiota”,数量:6,{id:“boletus”,数量:1},{id:“lepiota”,数量:4},{id:“洋甘菊”,数量:4},],}];
COLLECTION.forEach((o)=>{
o、 项目=对象值(o.items.reduce((a,c)=>{
(a[c.id]| |(a[c.id]={id:c.id,数量:0})).qty+=c.qty;
返回a;
}, {}));
});
console.log(集合);
.as console wrapper{max height:100%!important;top:0;}
您可以利用的强大功能,并通过使用映射函数呈现结果,该函数为项构建新对象
var集合=[{coords:[13352525],项目:[{id:“boletus”,数量:1},{id:“lepiota”,数量:3},{id:“boletus”,数量:2},{id:“lepiota”,数量:4},{id:“carbonite”,数量:4},},{coords:[15322889],项目:[{id:“boletus”,数量:2},{id:“lepiota”,数量:6},{id:“boletus”,数量:1:“boletus”,数量:4},{“洋甘菊”,数量:4}]};
COLLECTION.forEach(o=>{
var-map=新映射;
o、 items.forEach(({id,qty})=>map.set(id,(map.get(id)| | 0)+qty));
o、 items=Array.from(map,([id,qty])=>({id,qty}));
});
console.log(集合);
.as console wrapper{max height:100%!important;top:0;}
您可以利用的强大功能,并通过使用映射函数呈现结果,该函数为项构建新对象
var COLLECTION=[{coords:[13352525],条目:[{id:“boletus”,数量:1},{id:“boletus”,数量:3},{id:“boletus”,数量:2},{id:“lepiota”,数量:4},{id:“carbonite”,数量:4},},{coords:[15322889],条目:[{id:“boletus”,数量:2},{id:“lepiota”,数量:6},{id:“boletus”,数量:1:“boletus”,数量:4},{洋甘菊“,数量:4}]}];
COLLECTION.forEach(o=>{
var-map=新映射;
o、 items.forEach(({id,qty})=>map.set(id,(map.get(id)| | 0)+qty));
o、 items=Array.from(map,([id,qty])=>({id,qty}));
});
console.log(集合);
。作为控制台包装器{max height:100%!important;top:0;}
您的结果看起来与预期不同。您的结果看起来与预期不同。