Javascript 返回奇怪结果的While循环中的JS For循环

Javascript 返回奇怪结果的While循环中的JS For循环,javascript,Javascript,我正在尝试拆分一个字符串,并根据其索引将其合并。一个简单的例子是: 输入:“ABCABC” 输出:“aaabbccc” 因此,我创建了一个函数,将字符串转换为数组,将元素弹出到相应的数组中,并希望将其组合回字符串 下面是函数: function splitter(string, numSplit) { let splitHolder = []; let splitArr = string.split(""); while (splitArr.length >

我正在尝试拆分一个字符串,并根据其索引将其合并。一个简单的例子是:

输入:“ABCABC” 输出:“aaabbccc”

因此,我创建了一个函数,将字符串转换为数组,将元素弹出到相应的数组中,并希望将其组合回字符串

下面是函数:

function splitter(string, numSplit) {
  let splitHolder = [];
  let splitArr = string.split("");
  while (splitArr.length > 0) {
    for (let i = 0; i < numSplit; i++) {
      splitHolder[i] = splitHolder[i] === undefined
          ? [splitArr.shift()]
          : splitHolder[i].push(splitArr.shift());
      console.log(splitHolder);
    }
  }
}
这表明函数至少在第一个循环中运行正常。但是,在while检查for循环后的第二次循环中。我得到这个日志:

[ 2, [ 'B' ], [ 'C' ] ]
[ 2, 2, [ 'C' ] ]
[ 2, 2, 2 ]
这是非常奇怪的,因为我仍然试图推动什么是剩余的阵列?数字2是从哪里来的

最初认为这是一个范围问题,但事实并非如此,因为let的范围是针对整个函数的

还尝试了array reduce函数,但仍然得到相同的数字2。

您可以使用代替

concat
返回一个新数组,并
推送
数组的新长度

函数拆分器(字符串,numSplit){
设splitHolder=[];
设splitArr=string.split(“”);
while(拆分阵列长度){
for(设i=0;i
Array.push()在push之后返回数组的新长度

 let arr =['A', 'B']
当你将推进此阵列时

arr.push('C') // return 3 . i.e. length of the array.
我认为您不希望插入splitHolder,而是连接splitArr的第一个元素

function splitter(string, numSplit) {
  let splitHolder = [];
  let splitArr = string.split("");

  while (!!splitArr.length) {
    for (let i = 0; i < numSplit; i++) {
      splitHolder[i] = (splitHolder[i] === undefined)
          ? [splitArr.shift()]
          : splitHolder[i].concat(splitArr.shift());
      console.log(splitHolder);
    }
  }
 return splitHolder;
}
函数拆分器(字符串,numSplit){
设splitHolder=[];
设splitArr=string.split(“”);
while(!!splitArr.长度){
for(设i=0;i
'abcabc'.split(“”).sort().join(“”)
Array#push
返回数组的新长度,您正在执行
splitHolder[i]=splitHolder[i]。push(…)只需像其他人一样使用
if
语句。感谢@NiettheDarkAbsol的评论,它为我指出了导致数字2出现的正确方向。这确实是数组的长度。谢谢@Nina。真的错过了推送返回值。今天我学到了一些新东西。
function splitter(string, numSplit) {
  let splitHolder = [];
  let splitArr = string.split("");

  while (!!splitArr.length) {
    for (let i = 0; i < numSplit; i++) {
      splitHolder[i] = (splitHolder[i] === undefined)
          ? [splitArr.shift()]
          : splitHolder[i].concat(splitArr.shift());
      console.log(splitHolder);
    }
  }
 return splitHolder;
}