JavaScript中如何按嵌套数组首个元素分组第二个元素生成指定新数组
JavaScript实现数组分组的最优方案
实现思路
我们可以通过Array.prototype.reduce方法完成需求,仅需一次遍历原数组即可得到结果,时间复杂度为O(n),是性能最优的实现方式,同时代码简洁易读:
- 迭代过程中取出每个子数组的第一个元素作为结果数组的索引,第二个元素作为待存入的值
- 若结果数组对应索引位置未初始化,先初始化为空数组
- 将值存入对应索引的数组中即可
代码实现
const firstArray = [[0,2], [1,3], [0,5], [2,8], [1,4], [3,2]]; const secondArray = firstArray.reduce((result, [index, value]) => { // 对应索引无数组则先初始化,ES2021+ 语法 result[index] ||= []; result[index].push(value); return result; }, []); // 输出结果:[[2,5], [3,4], [8], [2]] console.log(secondArray);
如果需要兼容低版本ES环境,将result[index] ||= []替换为if (!result[index]) result[index] = []即可。
补充说明
如果原数组中的索引存在断层,得到的结果数组对应断层位置会是空位,如果你需要过滤掉这些空位,可以在reduce结束后补充filter(Boolean)操作,示例中的索引是连续的0~3,无需额外处理。
内容的提问来源于stack exchange,提问作者0v3rFl0w
相关产品推荐
相关产品推荐

