gpt4 book ai didi

javascript - 如何根据属性键对值进行唯一和求和

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:30 25 4
gpt4 key购买 nike

我有来自数据库的对象数据数组,这是我的数据:

const data = [
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 0,
'duration': '0 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 0,
'duration': '0 days',
'statusRanking': 'equal',
'totalProject': 1
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 2,
'duration': '2 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 3,
'duration': '3 days',
'statusRanking': 'equal',
'totalProject': 5
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 5,
'duration': '5 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 18,
'duration': '18 days',
'statusRanking': 'equal',
'totalProject': 6
}
];

我怎样才能使它们唯一?(基于partnerId键唯一)然后基于timeInt和totalProject键求和?

预期结果:

const data = [
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 21,
'duration': '21 days',
'statusRanking': 'equal',
'totalProject': 13
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 7,
'duration': '7 days',
'statusRanking': 'equal',
'totalProject': 5
}
];

我已经尝试过这个:

let a = data.reduce((acc, x) => acc.concat(acc.find(y => y.partnerId === x.partnerId) ? [] : [x]), []);

但这只是为了唯一,而不是为了求和 timeInt 和totalProject 键。

有什么解决办法吗?谢谢。

最佳答案

根据您的方法:您只需在将其插入数组之前“更改”x,然后使用 reduce 总结所需的属性(时间/项目):

const data = [{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 0,
'duration': '0 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 0,
'duration': '0 days',
'statusRanking': 'equal',
'totalProject': 1
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 2,
'duration': '2 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 3,
'duration': '3 days',
'statusRanking': 'equal',
'totalProject': 5
},
{
'partnerId': 2,
'partnerName': 'Company2',
'timeInt': 5,
'duration': '5 days',
'statusRanking': 'equal',
'totalProject': 2
},
{
'partnerId': 1,
'partnerName': 'Company1',
'timeInt': 18,
'duration': '18 days',
'statusRanking': 'equal',
'totalProject': 6
}
]

let a = data.reduce((acc, x) => {
if(acc.find(y => y.partnerId === x.partnerId)) return acc.concat([]);
const timeInt = data.filter(y => y.partnerId === x.partnerId).map(y => y.timeInt).reduce((a, b) => a + b, 0);
const totalProject = data.filter(y => y.partnerId === x.partnerId).map(y => y.totalProject).reduce((a, b) => a + b, 0);
return acc.concat([{
...x,
timeInt,
totalProject,
duration: timeInt + ' days'
}])}, []);

console.log(a)

关于javascript - 如何根据属性键对值进行唯一和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com