【发布时间】:2020-11-20 13:18:46
【问题描述】:
在这种情况下是否可以将 for 循环的数量减少到只有一个?我需要根据“等级”属性对对象进行分组,无论输出的数据类型如何,即使您的解决方案迫使我重新开始也没关系。我现在对算法了解不多,所以我需要你的帮助来改进我的代码,因为我不允许在单个代码块中使用多个 for 循环。
var schools = {
'SCHOOL_1':
[
// girls
{id: '1', school: 'SCHOOL_1', grade: 'A', message: 'Congratulations!'},
{id: '2', school: 'SCHOOL_1', grade: 'A', message: 'Good work!'},
{id: '3', school: 'SCHOOL_1', grade: 'A', message: 'Ok'},
// boys
{id: '4', school: 'SCHOOL_1', grade: 'A', message: 'Congratulations!'},
{id: '5', school: 'SCHOOL_1', grade: 'B', message: 'Good work!'},
{id: '6', school: 'SCHOOL_1', grade: 'B', message: 'Good work!'},
{id: '7', school: 'SCHOOL_1', grade: 'A', message: 'Congratulations!'},
{id: '8', school: 'SCHOOL_1', grade: 'B', message: 'Good work!'},
],
'SCHOOL_2':
[
// girls
{id: '9', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '10', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '11', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '12', school: 'SCHOOL_2', grade: 'B', message: 'Good work!'},
{id: '13', school: 'SCHOOL_2', grade: 'B', message: 'Nice!'},
// boys
{id: '14', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '15', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '16', school: 'SCHOOL_2', grade: 'A', message: 'Congratulations!'},
{id: '17', school: 'SCHOOL_2', grade: 'B', message: 'Congratulations!'},
]
}
var result = [];
for (let school in schools) {
// Group students by grade
let studentsByGrade = GroupByProperty(schools[school], 'grade');
// Second loop (I NEED TE REFACTOR THIS)
for (let grade in studentsByGrade) {
if (!result[grade]) result[grade] = [];
result[grade].push(studentsByGrade[grade]);
}
}
console.log('result',result);
function GroupByProperty(objectArray, property) {
let result = objectArray.reduce((acc, obj) => {
var key = obj[property];
if (!acc[key]) acc[key] = [];
acc[key].push(obj);
return acc;
}, {});
return result;
}
【问题讨论】:
-
Object.values(schools).flat() -
@Keith:秒杀我。
-
@ScottSauyet 是的,但你的答案得到了 cookie,.. 赞成..!
标签: javascript arrays loops object