如何从嵌套数组中提取对象的id属性值并生成新数组
解决嵌套数组提取id属性的问题
嗨,我来帮你搞定这个问题~首先得说,你之前用的map方法没达到预期,是因为myArray里的每一项都是子数组,而不是直接的对象,所以直接map(id => id)只是把原数组复制了一遍,根本没触碰到里面的对象。
针对你的需求,这里有两种简单又高效的实现方式:
方法一:使用flatMap(推荐)
flatMap可以同时完成「映射子数组」和「压平结果」的操作,完美适配这种嵌套数组的场景:
let myArray = [ [ {id: "1"}, {id: "2"} ], [], [], [ {id: "3"} ] ]; const tagIds = myArray.flatMap(subArray => subArray.map(item => item.id)); console.log(tagIds); // 输出: ["1", "2", "3"]
原理很简单:
- 先遍历
myArray里的每个子数组 - 对每个子数组,用
map提取其中对象的id属性 - 最后自动把所有子结果合并成一个一维数组,空数组因为映射后还是空,会被直接忽略
方法二:先压平再映射
如果你觉得flatMap有点陌生,也可以用更直观的flat() + map()组合:
let myArray = [ [ {id: "1"}, {id: "2"} ], [], [], [ {id: "3"} ] ]; const tagIds = myArray.flat().map(item => item.id); console.log(tagIds); // 输出: ["1", "2", "3"]
这里的flat()默认会把嵌套深度为1的数组压平成一维,空数组会被直接移除,剩下的就是所有含id的对象,再用map提取属性就搞定了。
如果你的数组有更深的嵌套(比如三层及以上),可以给flat()传参数Infinity,它会把所有层级的嵌套都压平。
内容的提问来源于stack exchange,提问作者AlexFF1
相关产品推荐
相关产品推荐

