首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列编队

阵列编队
EN

Stack Overflow用户
提问于 2022-02-05 11:27:45
回答 1查看 65关注 0票数 0

这里我有一组对象。我希望每个等级作为独立的数组,在数组中,我想要基于等级的部分和主题。

如果老师正在上一个年级,我想要的图式是他们选的是哪个年级和哪个部分,里面是他们要选的科目。

代码语言:javascript
复制
var user = [
  RowDataPacket { grade_id: 3, subject_id: 3, section_id: 747 },
  RowDataPacket { grade_id: 4, subject_id: 3, section_id: 748 },
  RowDataPacket { grade_id: 5, subject_id: 3, section_id: 749 },
  RowDataPacket { grade_id: 6, subject_id: 3, section_id: 750 },
  RowDataPacket { grade_id: 7, subject_id: 3, section_id: 751 },
  RowDataPacket { grade_id: 8, subject_id: 3, section_id: 752 },
  RowDataPacket { grade_id: 7, subject_id: 4, section_id: 751 }
]

所需/目标模式

代码语言:javascript
复制
let gradeDetails = [{
  grade_id: 3,
  section_details: [{
    section_id: 747,
    subject_details: [{subject_id: 3}]
  }]
}, {
  .
  .
  .
}, {
  grade_id: 7
  section_details: [{
    section_id: 751,
    subject_details: [
      {subject_id: 3},
      {subject_id: 4}
    ]
  }]
}, {
  grade_id: 8,
  section_details: [{
    section_id: 752,
    subject_details: [{subject_id: 3}]
  ]}
}];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-05 14:48:01

下面的代码片段可能是实现所需结果的一种方法:

码样例

代码语言:javascript
复制
const getGradeDetailsArray = (arr = user) => {
  const resultArr = [];
  for (const grade of (new Set(arr.map(obj => obj.grade_id)))) {
    const resObj = {
        grade_id: grade,
      section_details: arr.filter(
        obj => obj.grade_id === grade
        ).map(
        obj => ({
            section_id: obj.section_id,
          subject_details: [{ subject_id: obj.subject_id }]
          })
        )
    };
    resultArr.push(resObj)
  };
  return resultArr;
};

解释

将结果初始化为一个名为resultArr

  • Obtain unique grade_id的空数组,使用new Set(),并为每个级别迭代每个级别的

  • ,构造一个要被设置为result

  • grade_id的对象,将grade

  • section_details设置为经过匹配筛选的数组,grade_id

  • subect_details是一个具有确切元素的数组(即subject_id).

  • Return the resultArr

)。

代码片段

代码语言:javascript
复制
const user = [
    { grade_id: 3, subject_id: 3, section_id: 747 },
  { grade_id: 4, subject_id: 3, section_id: 748 },
  { grade_id: 5, subject_id: 3, section_id: 749 },
  { grade_id: 6, subject_id: 3, section_id: 750 },
  { grade_id: 7, subject_id: 3, section_id: 751 },
  { grade_id: 8, subject_id: 3, section_id: 752 },
  { grade_id: 7, subject_id: 4, section_id: 751 },
];

const getGradeDetailsArray = (arr = user) => {
  const resultArr = [];
  for (const grade of (new Set(arr.map(obj => obj.grade_id)))) {
    const resObj = {
        grade_id: grade,
      section_details: arr.filter(
        obj => obj.grade_id === grade
        ).map(
        obj => ({
            section_id: obj.section_id,
          subject_details: [{ subject_id: obj.subject_id }]
          })
        )
    };
    resultArr.push(resObj)
  };
  return resultArr;
};

console.log(getGradeDetailsArray());

const newGetGradeDetails = (arr = user) => (
    Object.entries(
    arr.reduce((fin, itm) => ({
      ...fin,
      [itm.grade_id]: {
        ...fin[itm.grade_id],
        [itm.section_id]: {
          ...(fin && fin[itm.grade_id] && fin[itm.grade_id][itm.section_id]
                ? fin[itm.grade_id][itm.section_id]
                : {}
             ),
          subjects: [
            ...(fin && fin[itm.grade_id] &&
                fin[itm.grade_id][itm.section_id] &&
                fin[itm.grade_id][itm.section_id].subjects &&
                Array.isArray(fin[itm.grade_id][itm.section_id].subjects)
                ? fin[itm.grade_id][itm.section_id].subjects
                : []
               ),
            itm.subject_id
          ]
        }
      }
    }) ,{})
  ).map(([kg, vg]) => ({
    grade_id: kg,
    section_details: Object.entries(vg).map(([kse, vse]) => ({
        section_id: kse,
      subject_details: vse.subjects.map(su => ({
        subject_id: su
      }))
    }))
  }))
);

console.log('\n\tUpdated as per comments noted below\n\n', newGetGradeDetails());

编辑:添加了新的方法来解释在下面的注释中请求的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70997579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档