获取数组对之间的所有数字(Javascript)

时间:2018-01-10 12:09:55

标签: javascript arrays numbers

我有一个类似于以下的数组:

[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

1 个答案:

答案 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; }