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)