我试图拆分一个字符串,并根据它的索引组合它。 一个简单的例子是:
输入:“ABCABCABC”输出:“AAABBBCCC”
因此,我创建了一个函数,将字符串转换为数组,将元素弹出为相应的数组,并希望将其组合回字符串。
功能如下:
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);
}
}
}
console.log的结果显示:
[ [ 'A' ] ]
[ [ 'A' ], [ 'B' ] ]
[ [ 'A' ], [ 'B' ], [ 'C' ] ]
这表明函数至少在第一个循环中运行正常。 但是,在for循环的第二遍中,在while检查它之后。 我得到了这个日志:
[ 2, [ 'B' ], [ 'C' ] ]
[ 2, 2, [ 'C' ] ]
[ 2, 2, 2 ]
这是非常奇怪的,因为我仍然试图推动什么是剩余的数组? 数字2是从哪里来的?
最初认为这是一个作用域问题,但它不是,因为let是整个函数的作用域。
也尝试了数组减少函数,但仍然得到了相同的数字2。
您可以使用array#concat
而不是array#push
。
concat
返回一个新数组,并推
数组的新长度。
null
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());
}
}
return splitHolder;
}
console.log(splitter('ABCABCABC', 3));
array.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;
}