如何过滤JavaScript对象数组中嵌套数组内的指定元素?
解决方案
你的问题核心是要保留所有外层分类对象,仅过滤每个分类下的内层items数组,而你之前的代码都是在过滤外层数组(categories.filter(...)),这就导致要么逻辑错误,要么只留下包含符合条件item的分类,但没处理内层items的筛选。
正确实现步骤:
- 用
map遍历外层的categories数组,保留每一个分类对象; - 对每个分类的
items数组,用filter筛选出power数值大于50的元素(注意power是字符串类型,需要先转成数字再比较); - 返回新的分类对象,避免修改原数组。
完整代码:
let categories = [{ categoryName: 'Mammals', items: [{ name: 'Dog', power: '52', },{ name: 'Bear', power: '205', },{ name: 'Mouse', power: '7', }] },{ categoryName: 'Reptiles', items: [{ name: 'Alligator', power: '230', },{ name: 'Turtle', power: '39', }] }]; let output = categories.map(category => ({ ...category, // 复制原分类的所有属性 items: category.items.filter(item => Number(item.power) > 50) // 过滤内层items })); console.log(output);
代码说明:
categories.map(...):遍历每个分类,返回新的对象数组,确保不修改原数组;...category:ES6扩展运算符,复制原分类的categoryName等属性;category.items.filter(...):对每个分类的items数组进行筛选,用Number(item.power)把字符串类型的power转成数字,再和50比较;- 最终得到的
output就是你期望的结果:所有外层分类保留,每个分类下的items只留下power>50的元素。
内容的提问来源于stack exchange,提问作者Marek OCLC
相关产品推荐
相关产品推荐

