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