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

实现字符串每n个字符翻转函数:使用join后为何仍有逗号?

问题原因

你代码里的resultStr是个二维数组——每次调用splitStr.slice(i, incrementN)返回的都是一段字符组成的数组,你直接把这个数组push进resultStr,导致resultStr变成了数组套数组的结构。

当你对二维数组调用join("")时,JavaScript会先把每个子数组自动转为字符串(子数组默认的字符串化规则是用逗号分隔内部元素),再把这些字符串拼起来,所以最终输出里才会出现逗号。

修复方案

有两种简单的修复方式:

方式一:在切片时直接处理成字符串

在第一个循环里,把切片得到的子数组直接反转并转为字符串,再push进resultStr,这样resultStr就变成普通的字符串数组,最后join就不会有逗号了:

function flipEveryNChars(input, n) {
  var splitStr = input.split('');
  var resultStr = [];
  var incrementN = n;

  for (let i = 0; i < splitStr.length; i++) {
    // 切片后直接反转并转成字符串再push
    resultStr.push(splitStr.slice(i, incrementN).reverse().join(''));
    i += n - 1;
    incrementN += n;
  }

  return resultStr.join("");
}

var input = 'a short example';
var output = flipEveryNChars(input, 5);
console.log(output); // 输出:ohs axe trelpma

方式二:扁平化二维数组后再join

如果不想修改循环逻辑,可以在return之前,用flat()把二维数组转成一维字符数组,再调用join:

function flipEveryNChars(input, n) {
  var splitStr = input.split('');
  var resultStr = [];
  var incrementN = n;

  for (let i = 0; i < splitStr.length; i++) {
    resultStr.push(splitStr.slice(i, incrementN));
    i += n - 1;
    incrementN += n;
  }

  for (let j = 0; j < resultStr.length; j++) {
    resultStr[j].reverse();
  }
  // 先扁平化数组,再join
  return resultStr.flat().join("");
}

var input = 'a short example';
var output = flipEveryNChars(input, 5);
console.log(output); // 输出:ohs axe trelpma

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:12:41