You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤JavaScript对象数组中嵌套数组内的指定元素?

解决方案

你的问题核心是要保留所有外层分类对象,仅过滤每个分类下的内层items数组,而你之前的代码都是在过滤外层数组(categories.filter(...)),这就导致要么逻辑错误,要么只留下包含符合条件item的分类,但没处理内层items的筛选。

正确实现步骤:

  1. 用map遍历外层的categories数组,保留每一个分类对象;
  2. 对每个分类的items数组,用filter筛选出power数值大于50的元素(注意power是字符串类型,需要先转成数字再比较);
  3. 返回新的分类对象,避免修改原数组。

完整代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:55:27