我有一个类似于以下的数组:
[38, 40, 51, 53, 57, 59, 70, 72, 104, 106, 111, 113, 117, 130, 134, 148, 154, 156]
此数组中的所有奇数索引都是起始编号,所有偶数索引都是停止编号。从这个数组我想创建另一个数组,其中包含此数组中的所有这些数字以及其间的其他数字。所以最终输出变为:
[38, 39, 40, 51, 52, 53, 57, 58, 59, 70, 71, 72, 104, 105, 106, ... ]
另一个例子:
对于输入数组[5, 9, 12, 15, 21, 24, 30, 36]
输出应为[ 5, 6, 7, 8, 9, 12, 13, 14, 15, 21, 22, 23, 24, 30, 31, 32, 33, 34, 35, 36]
任何帮助表示赞赏。
以下是我的尝试:
for (var i=0;i<array1.length;i++) {
if (i % 2 == 0) {
var start = array1[i];
var stop= array1[i+1];
array2.push(start);
for (var j=start+1;j<=stop;start++){
array2.push(j)
}
}
}
我收到以下错误:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
答案 0 :(得分:1)
你得到一个无限循环,因为你没有增加j
,而是增加start
,这对j
没有影响。
for (var j = start + 1; j <= stop; start++) {
// ^^^^^^^
需要
for (var j = start + 1; j <= stop; j++) {
// ^^^
这种方法可能有点简洁:
虽然总有一对数字,但您可以迭代数组并将索引增加2
,因为循环中需要使用索引处的值作为起始值和值的两个值。 index + 1
作为最终价值。
在for
循环内部,您可以使用临时变量value
来递增并推送到结果集。
然后你需要一个do ... while
语句,因为首先需要将实际(开始)值推送到结果集,然后递增该值并检查数组的结束值。
继续,直到阵列中没有其他项目。
var array = [38, 40, 51, 53, 57, 59, 70, 72, 104, 106, 111, 113, 117, 130, 134, 148, 154, 156],
result = [],
value,
i;
for (i = 0; i < array.length; i += 2) { // increment by 2
value = array[i]; // take start value
do {
result.push(value); // push the value
value++; // increase value
} while (value <= array[i + 1]) // and check if the value is smaller or equal
} // to the end value
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }