实现字符串每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
相关产品推荐
相关产品推荐

