如何过滤多维数组并保留原有Owner层级结构?
保留Owner结构过滤指定犬种的实现方法
你之前的代码只返回了过滤后的狗数组,没有保留原Owner对象的结构。要实现保留每个Owner对象并替换其dog数组为过滤后的结果,只需在map中返回包含原Owner所有属性+过滤后dog数组的新对象即可:
const filteredOwners = owners.map(owner => ({ ...owner, // 复制原Owner的所有属性(如姓名、年龄等其他字段) dog: owner.dog.filter(dog => dog.typeOfDog !== "poodle") // 替换dog数组为过滤后的结果 }));
说明:
- 使用扩展运算符
...owner可以保留原Owner对象的所有其他属性(如果存在的话),避免丢失结构。 owner.dog.filter(...)生成新的数组,仅保留非"poodle"的犬种,替换原对象的dog属性。
可选:移除无剩余犬只的Owner
如果需要过滤掉那些所有狗都是poodle的Owner(即过滤后dog数组为空的对象),可以在map之后再加一层filter:
const filteredOwners = owners .map(owner => ({ ...owner, dog: owner.dog.filter(dog => dog.typeOfDog !== "poodle") })) .filter(owner => owner.dog.length > 0);
这样处理后,结果就完全符合你想要的结构:每个元素都是完整的Owner对象,其dog数组仅包含非poodle的犬种。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

