You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何分组拼接数组内字符串得到指定输出结果?

数组相邻两元素拼接实现方案

你的思路方向是对的,reduce完全可以实现目标效果,只要调整累加逻辑、明确传入初始累加值即可,另外还有更适合初学者理解的直白实现方式,具体如下:


方法1:调整reduce逻辑实现

你之前的写法会得到全量拼接的长字符串,核心问题有两个:一是没有做分组判断,每次迭代都直接把元素拼到累加结果后;二是没有传入初始值,reduce默认取数组第一个元素作为初始累加值,从第二个元素开始遍历,不符合分组处理的需求。
调整后的代码如下:

const array = ['apple', 'banana', 'salami', 'cheese'];
const result = array.reduce((acc, cur, index) => {
  // 索引为偶数(0、2...)时,代表新分组的第一个元素,先推入结果数组
  if (index % 2 === 0) {
    acc.push(cur);
  } else {
    // 索引为奇数时,拼接到当前分组的最后一个字符串末尾
    acc[acc.length - 1] += cur;
  }
  return acc;
}, []); // 初始值传空数组,用来存最终的分组拼接结果

console.log(result); // 输出: ['applebanana', 'salamicheese']

注:你给出的目标结果中第一个值applebanaa应为笔误,前两个元素拼接的正确结果为applebanana


方法2:步长为2的for循环实现(初学者首选)

如果觉得reduce的迭代逻辑绕,直接用普通for循环、把步长设为2是最直白好懂的写法,几乎没有理解成本,也不容易写错:

const array = ['apple', 'banana', 'salami', 'cheese'];
const result = [];
// 每次索引加2,跳过已经处理过的相邻元素
for (let i = 0; i < array.length; i += 2) {
  // 做边界判断,避免数组长度为奇数时出现undefined拼接的问题
  result.push(array[i] + (array[i + 1] ?? ''));
}

console.log(result); // 输出: ['applebanana', 'salamicheese']

最佳实践建议

  • 固定每2个元素拼接的场景,优先选步长为2的for循环实现:逻辑完全线性,一眼就能看懂作用,调试和维护成本最低,对初学者非常友好。
  • 如果后续可能调整分组规则(比如改成每3个元素一拼接),选reduce写法更灵活,只要修改分组判断逻辑即可,扩展性更强。
  • 不要用「先把所有元素拼成一个长字符串,再按固定长度切割」的方案:这种方式需要提前计算每个元素的长度,逻辑冗余,还容易因为字符串长度计算错误出问题。

内容的提问来源于stack exchange,提问作者Saebel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:54:20