JavaScript减少内部映射
我试图根据对象的一个属性的总和对对象数组进行排序。基本上是这样的:JavaScript减少内部映射,javascript,mapreduce,Javascript,Mapreduce,我试图根据对象的一个属性的总和对对象数组进行排序。基本上是这样的: array = [ { id:4, tally: [1, 3, 5] }, { id: 6, tally: [2, 3, 6] }, { id: 9, tally: [2, 1, -1]
array = [
{
id:4,
tally: [1, 3, 5]
},
{
id: 6,
tally: [2, 3, 6]
},
{
id: 9,
tally: [2, 1, -1]
}
]
array = [
{
id:6,
tally: [2, 3, 6]
},
{
id: 6,
tally: [1, 3, 5]
},
{
id: 9,
tally: [2, 1, -1]
}
]
如果我们对相应的tally
s求和,我们将分别得到9、11和2,在这种情况下,我希望如下所示:
array = [
{
id:4,
tally: [1, 3, 5]
},
{
id: 6,
tally: [2, 3, 6]
},
{
id: 9,
tally: [2, 1, -1]
}
]
array = [
{
id:6,
tally: [2, 3, 6]
},
{
id: 6,
tally: [1, 3, 5]
},
{
id: 9,
tally: [2, 1, -1]
}
]
我知道这是
map
,reduce
的某种组合,但我很难看到如何用合适的React格式对其进行编码。您可以使用排序
:
var arr=[{id:4,
计数:[1,3,5]},
{id:6,
计数:[2,3,6]},
{id:9,
计数:[2,1,-1]}
]
变量结果=arr.sort((a,b)=>{
aa=a.理货减少((acc,要素)=>acc+elem,0);
bb=b.理货减少((acc,要素)=>acc+elem,0);
返回bb aa;
});
控制台日志(结果)代码>您可以使用排序来执行此操作:
var arr=[{id:4,
计数:[1,3,5]},
{id:6,
计数:[2,3,6]},
{id:9,
计数:[2,1,-1]}
]
变量结果=arr.sort((a,b)=>{
aa=a.理货减少((acc,要素)=>acc+elem,0);
bb=b.理货减少((acc,要素)=>acc+elem,0);
返回bb aa;
});
控制台日志(结果)
您可以首先使用map
和reduce
计算每个对象中的sum,然后使用sort
方法对新数组排序,然后使用另一个map
方法删除sum属性
const数组=[{
id:4,
计数:[1,3,5]
},
{
id:6,
计数:[2,3,6]
},
{
id:9,
计数:[2,1,-1]
}
]
常量排序=数组
.map({tally,…rest})=>({
总和:计数。减少((r,e)=>r+e,0),计数,…剩余
}))
.sort((a,b)=>b.sum-a.sum)
.map(({sum,…rest})=>rest)
log(排序)
您可以首先使用map
和reduce
计算每个对象中的总和,然后使用sort
方法对新数组排序,然后使用另一个map
方法删除sum属性
const数组=[{
id:4,
计数:[1,3,5]
},
{
id:6,
计数:[2,3,6]
},
{
id:9,
计数:[2,1,-1]
}
]
常量排序=数组
.map({tally,…rest})=>({
总和:计数。减少((r,e)=>r+e,0),计数,…剩余
}))
.sort((a,b)=>b.sum-a.sum)
.map(({sum,…rest})=>rest)
console.log(排序)
您可以先将总和累加到一个数组中,其中每个键都是对象的id
,每个值都是该对象的计数数组的总和。您可以使用.reduce()
计算总和。这里的acc
是一个累加值,它从0开始,每次调用reduce回调时都被加上
获得每个对象的总和后,可以使用.sort()
根据每个对象的总和进行排序,如下所示:
const数组=[{id:4,tally:[1,3,5]},{id:6,tally:[2,3,6]},{id:9,tally:[2,1,-1]}];
const sumMap=新映射(array.Map(
({id,tally})=>[id,tally.reduce((acc,n)=>acc+n,0)])
);
const res=array.sort((a,b)=>sumMap.get(b.id)-sumMap.get(a.id));
控制台日志(res)
您可以先将总和累加到一个数组中,其中每个键都是对象的id
,每个值都是该对象的tall
数组的总和。您可以使用.reduce()
计算总和。这里的acc
是一个累加值,它从0开始,每次调用reduce回调时都被加上
获得每个对象的总和后,可以使用.sort()
根据每个对象的总和进行排序,如下所示:
const数组=[{id:4,tally:[1,3,5]},{id:6,tally:[2,3,6]},{id:9,tally:[2,1,-1]}];
const sumMap=新映射(array.Map(
({id,tally})=>[id,tally.reduce((acc,n)=>acc+n,0)])
);
const res=array.sort((a,b)=>sumMap.get(b.id)-sumMap.get(a.id));
控制台日志(res)代码>