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

如何过滤嵌套对象数组并移除结果中的空数组?

如何清理嵌套数组过滤后产生的空数组?

我看你现在的问题是用map+filter处理嵌套数组后,结果里混进了空数组对吧?其实问题出在map的特性上——它会为原数组的每一个元素都返回一个结果,哪怕过滤后是空数组,也会被保留下来。

要解决这个问题,只需要在现有的map操作之后,再加一层filter,把长度为0的空数组过滤掉就行。

修改后的代码:

const resKey = 'ABC';
const data = [
  [{ "user": { "firstName": "John", "lastName": "Smith", }, "id": "ABC" }],
  [{ "user": { "firstName": "John", "lastName": "Smith", }, "id": "DEF" }]
];
const result = data
  .map(eachArr => eachArr.filter(eachObj => eachObj.id === resKey))
  .filter(nestedArr => nestedArr.length > 0); // 新增这一行过滤空数组
console.log(result);

为什么这样可行?

  • 第一步map还是会生成包含匹配数组和空数组的结果;
  • 第二步filter会检查每个子数组的长度,只有长度大于0的(也就是有匹配结果的)才会被保留下来,正好符合你的预期输出。

另外补充个小技巧:如果你的场景允许把嵌套结构拍平一层,也可以用flatMap来简化写法,但如果需要保留原有的子数组嵌套形式,map+filter的组合会更贴合需求。

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:42:46