如何从嵌套结构的JS数组中提取所有id值并生成新的一维数组?
解决方案
你可以使用flatMap替代普通map实现数组自动降维,同时直接提取id字段,示例代码如下:
const allActivityIds = activities.flatMap(activity => activity.options.flatMap(opt => opt.activities.map(act => act.id) ) )
flatMap的作用是执行map后自动将返回的数组展开一层,不会产生嵌套结构,最终得到的就是所有id组成的一维数组。
如果你的运行环境不支持flatMap,也可以搭配flat方法手动打平嵌套:
const allActivityIds = activities .map(activity => activity.options.map(opt => opt.activities.map(act => act.id))) .flat(Infinity)
其中Infinity参数代表将所有层级的嵌套数组全部打平,你也可以根据实际嵌套层数填写具体数字(比如当前结构嵌套3层就填3)。
如果你的嵌套结构是更深的递归结构(即activities内部还可能嵌套options和activities),可以使用递归函数实现通用提取:
function collectActivityIds(arr) { const ids = [] arr.forEach(item => { if (item.id) ids.push(item.id) if (Array.isArray(item.options)) { ids.push(...collectActivityIds(item.options.flatMap(opt => opt.activities || []))) } if (Array.isArray(item.activities)) { ids.push(...collectActivityIds(item.activities)) } }) return ids } // 调用方法 const allActivityIds = collectActivityIds(activities)
内容的提问来源于stack exchange,提问作者Carlos Vieira
相关产品推荐
相关产品推荐

