Как изменить метод .filter для массива, чтобы передать еще одну переменную, необходимую для фильтрации? - PullRequest
0 голосов
/ 28 августа 2018

Учитывая массив со списком участников, некоторые студенты, некоторые учителя:

var participants = [
    {'name': 'G01a','email':'g01a@m.io','group': '1','role':'student'},
    {'name': 'G01b','email':'g01b@m.io','group': '1','role':'student'},
    {'name': 'G02a','email':'g02a@m.io','group': '2','role':'student'},
    {'name': 'G02b','email':'g02b@m.io','group': '2','role':'student'},
    {'name': 'P01', 'email':'p01@m.io', 'group': 'teacher','role':'teacher'},
    {'name': 'P02', 'email':'p02@m.io', 'group': 'teacher','role':'teacher'},
];

В настоящее время я пишу 2 очень похожих функции фильтра для фильтров учеников, затем учителя:

// DERIVATED INITIAL DATA
var checkRoleS = function (participant){ 
  console.log(participant.role== 'student')
  return participant.role == 'student';
}
var students = participants.filter(checkRoleS);
console.log(students)

// DERIVATED INITIAL DATA
var checkRoleTeachers = function (participant){ 
  console.log(participant.role== 'teacher')
  return participant.role == 'teacher';
}
var teachers = participants.filter(checkRoleTeachers);
console.log(teachers)

Как получить одну checkRole функцию с еще одним параметром sot для передачи строки «ученик» или «учитель», необходимой для фильтрации?

Таким образом получается что-то вроде:

var students = participants.filter(checkRole("students"));
var teachers = participants.filter(checkRole("teachers"));

РЕДАКТИРОВАТЬ: jsfiddle

1 Ответ

0 голосов
/ 28 августа 2018

вы можете использовать функцию anonymus, чтобы вызвать функцию проверки с таким количеством аргументов, как вы хотите:

var participants = [
    {'name': 'G01a','email':'g01a@m.io','group': '1','role':'student'},
    {'name': 'G01b','email':'g01b@m.io','group': '1','role':'student'},
    {'name': 'G02a','email':'g02a@m.io','group': '2','role':'student'},
    {'name': 'G02b','email':'g02b@m.io','group': '2','role':'student'},
    {'name': 'P01', 'email':'p01@m.io', 'group': 'teacher','role':'teacher'},
    {'name': 'P02', 'email':'p02@m.io', 'group': 'teacher','role':'teacher'},
];

var checkRole = function (participant, role){ 
  console.log(participant.role === role)
  return participant.role === role;
}

var students = participants.filter(i => checkRole(i, "student"));
console.log(students)

var teachers = participants.filter(i => checkRole(i, "teacher"));
console.log(teachers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...