【发布时间】:2021-08-15 18:24:23
【问题描述】:
我目前正在研究一个数组函数,它将连续数字的子数组转换为表示该数字范围的字符串——例如,这个数组...
[1, 2, 3, 6, 8, 10, 11, 12, 15, 18]
...会变成这个数组:
["1-3", 6, 8, "10-12", 15, 18]
我已经能够开发出一个大部分可以工作的函数,但是我遇到了一个奇怪的错误,其中所有超出拼接到数组中的最终数字范围的元素都被完全删除了。比如上面的测试数组其实变成了这样:
["1-3", 6, 8, "10-12"]
这是我到目前为止编写的代码。它还不是很漂亮,但正如我上面提到的,它可以一直到最后完成工作:
let testArray = [1, 2, 3, 6, 8, 10, 11, 12, 15, 18];
for (i = 0; i < testArray.length; i++) {
let consecutives = [];
consecutives.push(testArray[i]);
let j = i + 1;
while (j < testArray.length) {
if (testArray[j] == (testArray[j - 1] + 1)) {
consecutives.push(testArray[j]);
j++;
} else {
break;
}
}
if (consecutives.length > 2) {
let range = String(testArray[i]) + "-" + String(testArray[j - 1]);
console.log(testArray);
console.log(testArray[i]);
console.log(testArray[j]);
testArray.splice(i, j, range);
}
}
console.log(testArray);
这些是该代码输出的控制台日志:
Array(10) [ 1, 2, 3, 6, 8, 10, 11, 12, 15, 18 ]
1
6
Array(8) [ "1-3", 6, 8, 10, 11, 12, 15, 18 ]
10
15
Array(4) [ "1-3", 6, 8, "10-12" ]
我最初认为这是由于数组索引混淆造成的,但使用 index-1s 并没有解决问题。有没有其他人在 JavaScript 的拼接上遇到过类似的问题,如果有,你是如何让它工作的?
【问题讨论】:
标签: javascript arrays