JavaScript如何使用flatMap将多个数组合并为单个一维数组
问题原因
你之前使用concat得到重复结果,是因为每次执行list.concat(list)时,都是将当前单个用户所在的数组和自身做拼接,相当于每个子数组都复制了一遍内部的用户对象,既没有完成跨子数组的合并,还生成了重复条目。
实现代码
要求使用flatMap实现的方案如下,假设你存放所有独立单用户数组的变量名为userListContainer(替换为你实际使用的变量名即可),无论内部子数组数量是多少都能正常运行,不需要手动给数组加逗号、不需要使用展开运算符、不需要额外转存中间变量:
const mergedUserList = userListContainer.flatMap(singleItemArr => singleItemArr);
实现逻辑说明
flatMap的执行逻辑等价于先对数组执行map遍历,再对遍历结果执行深度为1的flat压平操作- 你的每一个子元素都是长度为1的用户对象数组,遍历过程中直接返回当前子数组,压平后就会把每个子数组内的用户对象直接提取到外层,最终得到一维的纯用户对象数组
- 该方案对子数组数量没有要求,多于或少于4个都能得到正确结果
执行后得到的结构和你预期完全一致:
[ { id: '46892319372', user_name: 'testerOne', identifier: '20202' }, { id: '15243879678', user_name: 'testerTwo', identifier: '20201' }, { id: '02857428679', user_name: 'testerThree', identifier: '20203' }, { id: '65284759703', user_name: 'testerFour', identifier: '20204' } ]
内容的提问来源于stack exchange,提问作者TheGloriesVe
相关产品推荐
相关产品推荐

