Я пытаюсь получить список сотрудников, у которых есть только активные увлечения и роль которых принадлежит типу "А".
Я пытался использовать приведенный ниже запрос, но безуспешно.
Что я делаю не так?
// Get all the employees with active hobbies and have a role of 'A'
var employees = people.find(item => item.key === 'Employees').employees.map(emp => emp.hobbies).filter(hobby => hobby.filter(h => h.active === true && h.roles.includes('A')));
console.log(employees);
<script>
var people = [{
key: 'Employees',
employees: [{
name: 'joe',
age: 20,
hobbies: [{
'active': true,
name: 'skating',
roles: ['C', 'A']
}]
},
{
name: 'amy',
age: 32,
hobbies: [{
'active': true,
name: 'surfing',
roles: ['A']
}]
},
{
name: 'kate',
age: 34,
hobbies: [{
'active': true,
name: 'running',
roles: ['C']
}, {
name: 'Chess',
active: false,
roles: ['C', 'A']
}]
}
]
}];
</script>
Обновление
Когда я добавил в массив больше сотрудников с новыми увлечениями, принятый ответ не дал правильного результата. Почему это происходит?
var people = [{
key: 'Employees',
employees: [{
name: 'Steve',
age: 50,
hobbies: [{
active: true,
name: 'skating',
roles: ['C', 'A']
},
{
active: false,
name: 'skating',
roles: ['C', 'A']
},
{
active: true,
name: 'snooker',
roles: ['C', 'A']
},
{
active: true,
name: 'darts',
roles: ['C', 'A']
}
]
},{
name: 'joe',
age: 20,
hobbies: [{
active: true,
name: 'skating',
roles: ['C', 'A']
}
]
}, {
name: 'amy',
age: 32,
hobbies: [{
'active': true,
name: 'surfing',
roles: ['A']
}
]
}, {
name: 'kate',
age: 34,
hobbies: [{
active: true,
name: 'running',
roles: ['C']
}, {
name: 'Chess',
active: false,
roles: ['C', 'A']
}
]
}
]
}
];
var employees = people.find(item => item.key === 'Employees').employees.filter(employee => employee.hobbies.every(h => h.active && h.roles.includes('A')));