javascript - 从对象数组中获取具有总和的不同项目
问题描述
我真的搜索过,找不到正确的答案。我有一个对象数组:
[ { currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '505',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 633.6 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '404',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2534.4 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '303',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 633.6 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '203',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 950.4000000000001 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '202',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2534.4 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '500',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 576 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '400',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2304 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '300',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 576 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '201',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 864 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '200',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2304 } ]
我想要的是一个新的对象数组,显示 currentMonth、employeeNumber、caLastName、caFirstName、rate_per_hour、clientType、totalHours 的总和以及每个员工的工资总和。所以在这个例子中,一个只有两个对象的数组。
我尝试过减少和过滤,但我无法准确理解我哪里出错了。我宁愿不做一个循环,因为我怀疑效率会低很多。
新数组看起来有点像:
[ { currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 168,
wages: 7286.4 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 168,
wages: 6624 } ]
解决方案
您可以使用 reduce 和聚合数据,例如
const data = [ { currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '505',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 633.6 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '404',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2534.4 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '303',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 633.6 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '203',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 950.4000000000001 },
{ currentMonth: 'September-2018',
employeeNumber: '130',
caLastName: 'Bartoletti',
caFirstName: 'Elias',
payrollCode: '202',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2534.4 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '500',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 576 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '400',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2304 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '300',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 576 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '201',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 24,
wages: 864 },
{ currentMonth: 'September-2018',
employeeNumber: '196',
caLastName: 'Barrows',
caFirstName: 'Felicia',
payrollCode: '200',
rate_per_hour: 25,
clientType: 'Single',
totalHours: 48,
wages: 2304 } ]
const res = data.reduce((acc, obj) => {
const index = acc.findIndex(item => item.employeeNumber === obj.employeeNumber);
if(index > -1) {
console.log(acc[index])
acc[index] = {...acc[index], totalHours: acc[index].totalHours + obj.totalHours, wages: acc[index].wages + obj.wages};
} else {
acc = acc.concat([obj]);
}
return acc;
}, [])
console.log(res);
推荐阅读
- visual-studio-code - sudo 命令在 Vscode 终端中不起作用
- python - 在张量的上下文中理解广播
- .net-core - 动态查询中的 IgonreFilter
- python - html、flask 中的元素使用
- vb.net - 为什么 Me.Controls.OfType 在 VB.NET 中不起作用?
- swift - 将 CollectionView 图像的更新顺序保存到 UserDefaults - Swift
- python - 使用 ImageDataGenerator 进行迁移学习时出现形状不兼容错误
- django - 跨子域的 Django 用户身份验证不起作用
- python - 如何使用 pandas 读取多个文件并导出一张表中的行数?
- laravel-8 - 在laravel-8中为特定用户上传excel文件一般错误:1364字段'user_id'没有默认值