Javascript 按id分组并求和使用Lodash获取和以设置新值
是否可以按(例如,“id”)进行排序和分组,并通过使用Lodash添加键的所有唯一值(例如:支付)来更新元素的值?Javascript 按id分组并求和使用Lodash获取和以设置新值,javascript,arrays,Javascript,Arrays,是否可以按(例如,“id”)进行排序和分组,并通过使用Lodash添加键的所有唯一值(例如:支付)来更新元素的值? 例如,可以在下面创建此阵列: [ { id: 1, payout: 15, numOfPeople: 4 }, { id: 1, payout: 12, numOfPeople: 3 }, { id: 2, payout: 6, numOfPeople: 5 },
例如,可以在下面创建此阵列:
[
{
id: 1,
payout: 15,
numOfPeople: 4
},
{
id: 1,
payout: 12,
numOfPeople: 3
},
{
id: 2,
payout: 6,
numOfPeople: 5
},
{
id: 2,
payout: 10,
numOfPeople: 1
}
]
。。。使用LODASH将其转换为如下所示: // Notice the Sum of all payout reflects the total sum of all
// payout with id=1 or id=2 (for a specific id Group)
[
{
id: 1,
payout: 27,
numOfPeople: 4
},
{
id: 1,
payout: 27,
numOfPeople: 3
},
{
id: 2,
payout: 16,
numOfPeople: 5
},
{
id: 2,
payout: 16,
numOfPeople: 1
}
]
您可以结合使用
过滤器
、映射
和减少
来执行此操作
const arr = [
{
id: 1,
payout: 15,
numOfPeople: 4,
},
{
id: 1,
payout: 12,
numOfPeople: 3,
},
{
id: 2,
payout: 6,
numOfPeople: 5,
},
{
id: 2,
payout: 10,
numOfPeople: 1,
},
];
const idPayoutMap = {};
let result = arr.map(x => {
if (idPayoutMap['' + x.id] !== undefined) {
x.payout = idPayoutMap['' + x.id];
} else {
x.payout = arr
.filter(y => y.id === x.id)
.reduce((totalPayout, y) => y.payout + totalPayout, 0);
idPayoutMap['' + x.id] = x.payout;
}
return x;
});
console.log(result);
下面是一个工作示例:欢迎使用堆栈溢出!请拿着这本书,通读一遍,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运
thearray.map((f)=>{const n=Object.assign({},f);n.payout=a.filter((v)=>v.id==f.id)。reduce((a,v)=>a+v.payout,0);返回n;})
如果在求和之前我可以检查payout>0是否大于零