我将学生 ID 与标记映射的对象如下:
[
{id: 111, marks: [{sub: 'eng', mark: 90}, {sub: 'maths', mark: 20}]},
{id: 222},
{id: 333, marks: []},
{id: 444, marks: [{sub: 'eng', mark: 70}]}
]
我想减少它如下:
{
marks[0]: "0:eng:90", // studentIndex:subject_name:mark
marks[1]: "0:maths:20",
marks[2]: "3:eng:70"
}
在上面的结果中,键是“marks[]”,值是一个字符串,它是studentIndex、主题和标记的串联。 所以这里 0:eng:90 表示索引为 0 的学生在英语科目中获得了 90 分
我正在使用 lodash 并尝试了以下方法:
reduce(studentList, (acc, student, studentIndex) => {
map(get(student, 'marks'), (marks) => {
acc[`marks[${keys(acc).length}]`] = `${studentIndex}:${marks.sub}:${marks.mark}`;
});
return acc;
}, {});
还有其他更好的方法吗?
最佳答案
没有 Lodash
var studentList = [{"id":111,"marks":[{"sub":"eng","mark":90},{"sub":"maths","mark":20}]},{"id":222},{"id":333,"marks":[]},{"id":444,"marks":[{"sub":"eng","mark":70}]}]
var result = studentList.reduce((acc, student, studentIndex) => {
(student.marks || []).map((marks) => {
acc[`marks[${Object.keys(acc).length}]`] = `${studentIndex}:${marks.sub}:${marks.mark}`;
});
return acc;
}, {});
console.log(result)
使用 Lodash
var studentList = [{"id":111,"marks":[{"sub":"eng","mark":90},{"sub":"maths","mark":20}]},{"id":222},{"id":333,"marks":[]},{"id":444,"marks":[{"sub":"eng","mark":70}]}]
var result = _.reduce(studentList, (acc, student, studentIndex) => {
_.map(student.marks || [], (marks) => {
acc[`marks[${_.keys(acc).length}]`] = `${studentIndex}:${marks.sub}:${marks.mark}`;
});
return acc;
}, {});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
关于javascript - 我们如何减少嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981949/