【发布时间】:2022-01-08 01:25:44
【问题描述】:
如果javascript中的值相同,我想知道如何将对象的属性与相同的对象数组合并。
我的输入数据
var input = [
{ student: 'Alex', class: 'ten', subject: 'maths', marks: '85', answer: 'Moderate', percentage: '90', sports: 'good' },
{ student: 'Alex', class: 'ten', subject: 'maths', marks: '85', answer: 'Moderate', percentage: '90', sports: 'good' },
{ student: 'Alex', class: 'nine', subject: 'science', marks: '82', answer: 'Severe', percentage: '85', sports: 'good' },
{ student: 'Alex', class: 'nine', subject: 'science', marks: '82', answer: 'Severe', percentage: '85', sports: 'good' },
{ student: 'Alex', class: 'eight', subject: 'computer', marks: '90', answer: 'Extreme', percentage: '87', sports: 'good' },
{ student: 'Alex', class: 'eight', subject: 'computer', marks: '90', answer: 'Extreme', percentage: '87', sports: 'good' },
{ student: 'john', class: 'ten', subject: 'maths', marks: '90', answer: 'Extreme', percentage: '99', sports: 'good' },
{ student: 'john', class: 'ten', subject: 'maths', marks: '90', answer: 'Extreme', percentage: '99', sports: 'good' },
{ student: 'john', class: 'nine', subject: 'science', marks: '85', answer: 'Moderate', percentage: '100', sports: 'good' },
{ student: 'john', class: 'nine', subject: 'science', marks: '85', answer: 'Moderate', percentage: '100', sports: 'good' },
{ student: 'john', class: 'eight', subject: 'computer', marks: '87', answer: 'Extreme', percentage: '67', sports: 'good' },
{ student: 'john', class: 'eight', subject: 'computer', marks: '87', answer: 'Extreme', percentage: '67', sports: 'good' },
]
预期输出:
[
{ student: 'Alex',class: 'ten', maths: '85', science: '82',computer:'90', answer: 'Moderate', percentage: '90', sports: 'good'},
{ student: 'Alex',class: 'nine', maths: '85', science: '82',computer:'90', answer: 'Moderate', percentage: '85', sports: 'good'},
{ student: 'Alex',class: 'eight', maths: '85', science: '82',computer:'90', answer: 'Moderate', percentage: '87', sports: 'good'},
{ student: 'john',class: 'ten',maths: '90', science: '85',computer:'87',answer: 'Extreme', percentage: '99', sports: 'good'},
{ student: 'john',class: 'nine',maths: '90', science: '85',computer:'87',answer: 'Extreme', percentage: '100', sports: 'good'},
{ student: 'john',class: 'eight',maths: '90', science: '85',computer:'87',answer: 'Extreme', percentage: '67', sports: 'good'},
]
我试过下面的代码
const output = data.reduce((a, v) => {
const key = i.student + i.subject;
const subjectKey = v.subject
if (a[key]) {
a[key] = {
...v,
[subjectKey]: v.marks,
}
} else {
a[key] = v
}
return a
}, {})
console.log(Object.values(output))
【问题讨论】:
-
您将丢失一些当前预期输出的数据(
answers 对于每个对象都不同)。对象结构应该是name:'Alex', courses:[{subject:'Math',marks: '90', answer: 'Extreme' }, {subject:'Science',marks:'90',answer: 'Moderate' }]... 学生名也可以相同,必须有一些标识符。
标签: javascript reactjs ecmascript-6