TypeScript中forEach遍历:提取用户对象职业ID的嵌套数组问题
解决TypeScript中提取嵌套职业ID为一维数组的问题
嘿,我懂你现在的困扰!你得到嵌套数组的原因很简单——你应该是直接把每个user的profession数组整个push进了professionIdsToDelete里,所以才会出现数组套数组的结构。下面给你几种简单的解决办法:
方法一:改进forEach的写法
如果还是想用forEach遍历,只需要把push整个数组改成展开数组元素再push就行,用ES6的展开运算符...:
// 假设你的users数组结构是这样的 const users = [ { profession: ["NehR5yNTdHYR82oGi"] }, { profession: ["RQxxxx", "Abc123"] } ]; const professionIdsToDelete: string[] = []; users.forEach(user => { // 把profession数组里的每个元素单独添加到目标数组 professionIdsToDelete.push(...user.profession); }); console.log(professionIdsToDelete); // 输出一维数组: ["NehR5yNTdHYR82oGi", "RQxxxx", "Abc123"]
方法二:用flatMap一步到位(推荐)
TypeScript支持ES2019的flatMap方法,它专门用来处理这种“映射+扁平化”的场景,代码更简洁:
const professionIdsToDelete = users.flatMap(user => user.profession);
flatMap会先对每个user执行映射操作(取出profession数组),然后自动把结果扁平化一层,完美得到你想要的一维ID集合。
方法三:兼容旧环境的map+flat
如果你的运行环境不支持flatMap,也可以先map取出所有profession数组,再用flat()扁平化:
const professionIdsToDelete = users.map(user => user.profession).flat();
这样也能得到同样的一维数组结果。
内容的提问来源于stack exchange,提问作者antos junior
相关产品推荐
相关产品推荐

