如何在JavaScript(es6)中过滤另一个对象数组中的对象数组?

如何在JavaScript(es6)中过滤另一个对象数组中的对象数组?,javascript,arrays,ecmascript-6,filter,Javascript,Arrays,Ecmascript 6,Filter,我需要根据所选的另一个数组sitters筛选狗和坐者。(可以使用es6)。我的问题是处理嵌套的数组 不确定是否可能,但是 资料 预期产量 我试过了 filterResult=dogs.filter(dog=>dog.sitters.some(sitter=>sittersSelected.includes(sitter.name)) 我设法过滤了狗,但没有过滤保姆。还尝试了StackOverflow上的其他示例。有办法吗?可能使用.map() 谢谢您需要两个步骤 首先过滤每个sitters子数组

我需要根据所选的另一个数组
sitters
筛选
狗和
坐者
。(可以使用es6)。我的问题是处理嵌套的数组

不确定是否可能,但是

资料 预期产量 我试过了
filterResult=dogs.filter(dog=>dog.sitters.some(sitter=>sittersSelected.includes(sitter.name))

我设法过滤了
,但没有过滤
保姆
。还尝试了StackOverflow上的其他示例。有办法吗?可能使用
.map()

谢谢

您需要两个步骤

  • 首先过滤每个
    sitters
    子数组,以仅包括选定的子数组
  • 根据
    sitters
    数组是否包含任何元素筛选出父数组项:
  • const dogs=[{name:“爱丽丝”,性别:“雌性”,品种:“德国牧羊犬”,看护者:[{id:“123”,姓名:“艾比”},{id:“456”,姓名:“曼尼”},{id:“789”,姓名:“梅尔”}},{name:“巴克利”,性别:“雄性”,品种:“边境牧羊犬”,看护者:[{id:“321”,姓名:“古斯塔沃”},{id:“654”,姓名:“汤米”},{name:“熊”,性别:“雄性”,品种:“混血”,看护者:[{id:“艾比:”123”,姓名:“欧文:{id:“欧文”}}]}];
    const sittersSelected=[“艾比”、“曼尼”];
    (警犬中的警犬){
    dog.sitters=dog.sitters.filter(s=>sittersSelected.includes(s.name));
    }
    const filteredogs=dogs.filter(
    dog=>dog.sitters.length
    );
    
    控制台日志(过滤日志)1-使用映射返回新对象,仅包含筛选的Sitter

    2-使用过滤器仅返回有看门狗的看门狗

    let dogs = [{ name: 'Alice', sex: 'Female', breed: 'German Shepherd', sitters: [{ id: '123', name: 'Abby' }, { id: '456', name: 'Manny' }, { id: '789', name: 'Mel' },] }, { name: 'Buckley', sex: 'Male', breed: 'Border Collie', sitters: [{ id: '321', name: 'Gustavo' }, { id: '654', name: 'Tommy' },] }, { name: 'Bear', sex: 'Male', breed: 'Mixed', sitters: [{ id: '123', name: 'Abby' }, { id: '135', name: 'Owen' },] },];
    
    let sittersSelected = ["Abby", "Manny"];
    
    dogs.map(dog => {
        return {
            ...dog,
            sitters: dog.sitters.filter(sitter => sittersSelected.includes(sitter.name))
        }
    }).filter(dog => dog.sitters.length > 0);
    

    这两个列表的最大规模可能有多大?@TobiahRex它相当大,数据有更多的选择。。。我只是以狗为例。谢谢@CertainPerformance它工作得很好。但正如你所建议的,我正在使用
    map()
    来避免数组的变异。这很有效,非常感谢@ProSheta
    filterResult = [
      {
        name: 'Alice',
        sex: 'Female',
        breed: 'German Shepherd',
        sitters: [
          {
            id: '123',
            name: 'Abby'
          },
          {
            id: '456',
            name: 'Manny'
          },
        ]
      },
      {
        name: 'Bear',
        sex: 'Male',
        breed: 'Mixed',
        sitters: [
          {
            id: '123',
            name: 'Abby'
          },
        ]
      },
    ];
    
    let dogs = [{ name: 'Alice', sex: 'Female', breed: 'German Shepherd', sitters: [{ id: '123', name: 'Abby' }, { id: '456', name: 'Manny' }, { id: '789', name: 'Mel' },] }, { name: 'Buckley', sex: 'Male', breed: 'Border Collie', sitters: [{ id: '321', name: 'Gustavo' }, { id: '654', name: 'Tommy' },] }, { name: 'Bear', sex: 'Male', breed: 'Mixed', sitters: [{ id: '123', name: 'Abby' }, { id: '135', name: 'Owen' },] },];
    
    let sittersSelected = ["Abby", "Manny"];
    
    dogs.map(dog => {
        return {
            ...dog,
            sitters: dog.sitters.filter(sitter => sittersSelected.includes(sitter.name))
        }
    }).filter(dog => dog.sitters.length > 0);