【问题标题】:Trying to compare objects in different arrays in Javascript尝试在Javascript中比较不同数组中的对象
【发布时间】:2020-02-03 01:53:48
【问题描述】:

您好,我正在开发一个应用程序,根据学生的成绩向他们显示他们有资格参加哪些课程。我必须过滤与学生科目具有相同科目的课程,并且 mark 必须 >= value。 我附上了 JSON 的样子图片,前 6 个对象是学生的分数,其他 10 个对象是课程,每门课程都有一系列科目……这些是我们正在检查的科目。

【问题讨论】:

  • minimal reproducible example 的形式发布 JavaScript(就像一个函数——而不仅仅是一个对象)代码。您发布的图片不是很有帮助。

标签: javascript arrays object


【解决方案1】:

对于student 数组,您可以创建一个mark_lookup Map,它将每个Subject 键指向一个Mark 值。然后,您可以在courses 数组上使用.filter() 来查找内部Subjects 数组中.every() 主题的mark_lookup 值大于或等于该特定主题的值的所有课程。

请看下面的例子:

const student = [{Subject: "math", Mark: 75}, {Subject: "science", Mark: 45}, {Subject: "programming", Mark: 90}];
const courses = [{ Name: "Computer Science", Subjects: [{name: "math", value: 50}, {name: "programming", value: 60}] }, { Name: "Information Technology", Subjects: [{name: "programming", value: 50}] }, { Name: "Chemistry", Subjects: [{name: "math", value: 50}, {name: "science", value: 50}] }, { Name: "Psychology", Subjects: [{name: "english", value: 50}, {name: "science", value: 50}] }];

const getCourses = (student, courses) => {
  const mark_lookup = new Map(student.map(({Subject, Mark}) => [Subject, Mark]));
  return courses.filter(({Subjects}) => Subjects.every(
    ({name, value}) => (mark_lookup.get(name) || 0) >= value
  ));
}

console.log(getCourses(student, courses));
.as-console-wrapper { max-height: 100% !important;} /* ignore */

【讨论】:

    【解决方案2】:

    1) 从学生数组创建学生marks 对象。 2)通过课程,每个课程根据要求过滤主题。 3)如果科目超过0,则将更新科目的课程推送到结果

    const student = [
      { Subject: "English First Additional Language", Mark: 80 },
      { Subject: "Physical Sciences", Mark: 60 },
      { Subject: "Mathematics", Mark: 70 }
    ];
    const courses = [
      {
        Name: "Computer Science",
        Subjects: [
          { name: "English First Additional Language", value: 50 },
          { name: "Mathematics", value: 80 }
        ]
      },
      {
        Name: "Information Technology",
        Subjects: [{ name: "Physical Sciences", value: 50 }]
      },
      {
        Name: "Chemistry",
        Subjects: [{ name: "Physical Sciences", value: 70 }]
      }
    ];
    
    const marks = student.reduce((acc, { Subject, Mark }) => {
      acc[Subject] = Mark;
      return acc;
    }, {});
    
    
    const short_listed = courses.reduce((acc, { Name, Subjects }) => {
      const sel_subjects = Subjects.filter(({ name, value }) => marks[name] > value);
      if (sel_subjects.length > 0) {
        acc.push({
          Name,
          Subjects: sel_subjects
        });
      }
      return acc;
    }, []);
    
    console.log(short_listed); 

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多