如何简洁实现JavaScript数组中相邻元素的两两合并?
数组两两元素合并的简洁实现方式
这里提供几种比手动遍历+splice更简洁的实现方案,均基于创建新数组的方式(避免修改原数组,更符合函数式编程习惯):
方案1:使用Array.from
利用Array.from的映射功能,直接按分组规则生成新数组:
const x = ['1', '2', '3', '4', '5', '6']; const merged = Array.from({ length: x.length / 2 }, (_, index) => { return x[index * 2] + x[index * 2 + 1]; }); console.log(merged); // 输出: ['12', '34', '56']
原理:通过指定新数组长度为原数组的一半,每个索引对应原数组中一组相邻的两个元素,直接拼接成新元素。
方案2:使用Array.reduce
通过累加器逐步构建结果数组:
const x = ['1', '2', '3', '4', '5', '6']; const merged = x.reduce((result, current, idx) => { if (idx % 2 === 0) { // 偶数索引时,将当前元素作为新组的起始加入结果 result.push(current); } else { // 奇数索引时,拼接到结果数组的最后一个元素上 result[result.length - 1] += current; } return result; }, []); console.log(merged); // 输出: ['12', '34', '56']
原理:遍历原数组时,区分奇偶索引,偶数位初始化新组,奇数位补全当前组。如果原数组长度为奇数,最后一个元素会单独留在结果数组中,兼容性更好。
方案3:简化版for循环
如果觉得高阶函数不够直观,也可以用更高效的for循环(无需修改原数组):
const x = ['1', '2', '3', '4', '5', '6']; const merged = []; for (let i = 0; i < x.length; i += 2) { merged.push(x[i] + (x[i + 1] || '')); } console.log(merged); // 输出: ['12', '34', '56']
原理:每次步进2个索引,直接取当前和下一个元素拼接,x[i+1] || ''用于处理数组长度为奇数的情况,避免拼接undefined。
这些方案都不需要修改原数组,代码更简洁,可读性和维护性也优于splice修改原数组的方式。
内容的提问来源于stack exchange,提问作者kenwilde
相关产品推荐
相关产品推荐

