基于对象属性的子数组过滤数组

Posted

技术标签:

【中文标题】基于对象属性的子数组过滤数组【英文标题】:Filter array based on sub array of objects properties 【发布时间】:2021-03-13 05:50:21 【问题描述】:

鉴于以下对象数组,我正在尝试根据具有 ID 为 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);

【讨论】:

非常感谢,需要将内部对象与外部对象一样过滤 staff.filter(item => item.Events.some(e => e.Id === 30)) 在这里会好很多,因为如果找到匹配项,它会提前返回。

以上是关于基于对象属性的子数组过滤数组的主要内容,如果未能解决你的问题,请参考以下文章

过滤数组中的子数组

展平 Powershell 对象中的子数组,包括父对象属性

尝试从数组中的子对象创建数组

基于嵌套数组重新组合对象数组

基于创建年份将对象的数组拆分为子数组

PHP 过滤对象数组并返回新的对象数组,同时基于一个属性删除重复项