如何在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);