如何过滤嵌套对象数组并移除结果中的空数组?
如何清理嵌套数组过滤后产生的空数组?
我看你现在的问题是用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
相关产品推荐
相关产品推荐

