#javascript #jquery
#javascript #jquery
Вопрос:
Учитывая следующий массив объектов, я пытаюсь понять, как фильтровать верхний массив на основе массива событий, имеющего объект, содержащий идентификатор 30
var staff = [];
staff.push({
Id: 122,
Events: [
{Id: 30,Name: "Foo"},
{Id: 57,Name: "Bar"}
]});
staff.push({
Id: 122,
Events: [
{Id: 57,Name: "Bar"}
]});
До сих пор я пробовал варианты следующего:
$.grep(staff, function (item) {
return item.Events.Id == 30
});
Любая помощь будет с благодарностью
Ожидаемый результат:
var staff = [{Id: 122, Events: [{Id: 30,Name: "Foo"},{Id: 57,Name: "Bar"}]}];
Ответ №1:
var staff = [];
staff.push({
Id: 122,
Events: [
{ Id: 30, Name: 'Foo' },
{ Id: 57, Name: 'Bar' }
]
});
staff.push({
Id: 122,
Events: [{ Id: 57, Name: 'Bar' }]
});
const res = staff.filter((item) => item.Events.some((e) => e.Id === 30));
console.log(res);
Комментарии:
1. отлично, спасибо, имеет смысл фильтровать внутренний объект так же, как и внешний
2.
staff.filter(item => item.Events.some(e => e.Id === 30))
здесь было бы намного лучше, так как оно вернулось бы раньше, если будет найдено совпадение.