将一个对象数组中的属性的值映射到另一个对象数组Javascript中的属性

时间:2017-12-29 13:49:29

标签: javascript arrays javascript-objects

我有两个对象数组:

courses = [ { _id: 999, courseCode: "Eng1" },
{ _id: 777, courseCode: "Sci1" },
{ _id: 666, courseCode: "Eng2" },
{ _id: 888, courseCode: "Sci2" }  ]

sectionCourses = [ { sectionCode: "1A", courseId: "999" },
{ sectionCode: "1A", courseId: "777" },
{ sectionCode: "2A", courseId: "666" }, 
{ sectionCode: "2A", courseId: "888" }  ]

我希望过滤courses数组,使其仅包含不属于某个部分的课程。 例如,如果我选择包含sectionCode: "2A"的部分,则courses数组应仅包含

courses = [ { _id: 999, courseCode: "Eng1" },
    { _id: 777, courseCode: "Sci1" },
    { _id: 888, courseCode: "Sci2" }  ]

我试着这样做:

 courses = courses.filter(c => !(sectionCourses.includes(c._id)))

但我知道这是不完整的,因为我无法弄清楚如何在courseId中访问sectionCourses

请帮忙。

2 个答案:

答案 0 :(得分:2)

您无法使用_id方法通过courseIds查找整个对象,包括比较整个对象并且不搜索特定属性。

您可以在此处执行的操作是根据您提供的sectionCode获取要忽略的_id数组,然后过滤其ids不对的课程存在于此function getCourses(catCode) { var coursesIdstoIgnore = sectionCourses.filter(s => s.sectionCode === catCode).map(s => s.courseId); return courses.filter(c => coursesIdstoIgnore.indexOf(c["_id"].toString()) == -1); }

数组中
var courses = [{
    _id: 999,
    courseCode: "Eng1"
  },
  {
    _id: 777,
    courseCode: "Sci1"
  },
  {
    _id: 666,
    courseCode: "Eng2"
  },
  {
    _id: 888,
    courseCode: "Sci2"
  }
];

var sectionCourses = [{
    sectionCode: "1A",
    courseId: "999"
  },
  {
    sectionCode: "1A",
    courseId: "777"
  },
  {
    sectionCode: "2A",
    courseId: "666"
  },
  {
    sectionCode: "2A",
    courseId: "888"
  }
];

function getCourses(catCode) {
  var cousesIdstoIgnore = sectionCourses.filter(s => s.sectionCode === catCode).map(s => s.courseId);
  console.log(cousesIdstoIgnore);

  return courses.filter(c => cousesIdstoIgnore.indexOf(c["_id"].toString()) == -1);

}

var results = getCourses("2A");


console.log(results);

<强>演示:

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

courses.filter(course => sectionCourses.find(section => +section.courseId === +course._id))

请注意我在courseId_id属性之前使用+运算符。这会自动将String类型的数字转换为数字。 e.g

+"1" = 1
+1 = 1

这对于使用===

时的轻微比较问题非常有用

注意 Array.find()不适用于IE

相关问题