javascript - 我们如何减少嵌套数组?

标签 javascript arrays object ecmascript-6 lodash

我将学生 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/

相关文章:

javascript - 表格行高于 CSS 指定的行数(仅限 iPhone)

javascript - 使用 jquery 验证文本框

objective-c - 将 char 数组保存到 iPhone

ios - 如何将 Swift.ArraySlice 转换为 Swift.Array?

javascript - 将对象添加到数组失败

java - 使用循环创建新的 jpanels

javascript - 找到最近的比例算法

javascript - 根据其键聚焦特定元素

java - 我试图从 3 个字符串数组中随机选择元素?

javascript - 在类中声明对象类型