使用Javascript Array过滤器从数组中获取所有匹配的类

时间:2017-09-15 12:17:55

标签: javascript ecmascript-6

我想使用classes或任何ES6函数从coachId === 2数组filter中检索所有对象。

示例输入:

let arr = 
[
 {
  name: "boo",
  schedule: {
    classes: [ {coachId: 1}, {coachId: 2}, {coachId: 3}]
  }
 },
 {
  name: "foo",
  schedule: {
    classes : [ {coachId: 1}, {coachId: 2}, {coachId: 4}]
  }
 }
]

预期产出:

[ 
  [ {coachId: 2}], 
  [ {coachId: 2}] 
]

2 个答案:

答案 0 :(得分:2)

这是你要找的吗?

const arr = 
[
 {
  name: "boo",
  schedule: {
    classes: [ {coachId: 1}, {coachId: 2}, {coachId: 3}]
  }
 },
 {
  name: "bar",
  schedule: {
    classes : [ {coachId: 1}, {coachId: 4}]
  }
 }, 
 {
  name: "foo",
  schedule: {
    classes : [ {coachId: 1}, {coachId: 2}, {coachId: 4}]
  }
 }
]

console.log(arr.reduce((result, item) => {
  result = [...result, ...item.schedule.classes.filter(classItem => classItem.coachId === 2)];
  return result;
}, []));

答案 1 :(得分:0)

var arr = 
[
 {
  name: "boo",
  schedule: {
	classes: [ {coachId: 1}, {coachId: 2}, {coachId: 3}]
  }
 },
 {
  name: "foo",
  schedule: {
	classes : [ {coachId: 1}, {coachId: 2}, {coachId: 4}]
  }
 }
];

var employeeId = 2;
var finalArr = arr.map(item => { 
	item.schedule.classes = item.schedule.classes.map(cls => { 
        cls.coachId = employeeId; 
        return cls; 
    });
    return item;
});
console.log(finalArr);

编辑:

var employeeId = 2;
var finalArr = [];
arr.forEach(item => { 
    var classes = item.schedule.classes.map(cls => { 
        cls.coachId = employeeId; 
        return cls; 
    });
    finalArr = finalArr.concat(classes);
});
console.log(finalArr);