如何完成缺少(连续)元素的数组| JavaScript的?

时间:2015-02-27 15:53:56

标签: javascript arrays loops

我有一系列连续的数字,但有些数据丢失了。我也知道增量步骤。

var step = 1;
var data = [1,2,3,6,7,10];

// I'd like to output [1,2,3,4,5,6,7,8,9,10]

如何使用JavaScript执行此操作?

3 个答案:

答案 0 :(得分:1)

var step = 1;
var data = [1,2,3,6,7,10];

var start = data.shift();
var end = data.pop();
var newData = new Array();
for(i=start;i<=end;i+=step){
newData.push(i);
}

//alert(newData);

答案 1 :(得分:0)

Salketer有正确的答案,只是想我会玩弄不同的方法并分享它。

这个想法是它适用于任何列表,无论顺序如何。我找到了min和max,只是从头开始重建列表。

var data = [1,2,3,6,7,10];
var minmax = findMinMax(data);
console.log(minmax);
var res = createConsecutiveArray(minmax.min, minmax.max);
console.log(res);

function createConsecutiveArray(min, max){
    var res = [];
    for(var i = min; i <= max; i++){
        res.push(i);
    }
    return res;
}

function findMinMax(arr){
    var res = [];
    var min = max = (arr.length > 0) ? arr[0]: 0;
    for(var i = 0; i < arr.length; i++){
        var temp = arr[i];
        if(temp > max){
            max = temp;
        }
        if(temp < min){
            min = temp;
        }
    }
    return {min: min, max: max};
}

这是一个jsfiddle:http://jsfiddle.net/Grimbode/vtcpyumg/2/

答案 2 :(得分:0)

使用原始数组中的第一个和最后一个整数创建 new 数组很容易。

更改阵列更难。

此示例使用Array.splice在循环遍历现有数组时插入缺少的元素。

如果步长不是1,则传递的数组元素必须按顺序和步数的倍数。

function fill_ints(array, step){
    var i= 0, 
    min= array[0], 
    max= array[array.length-1], 
    diff= 0;
    while(min+step<max){
        diff= Math.floor((array[++i]- min)/step);
        while(--diff){
            array.splice(i++, 0, (min+= step));
        }
        min= array[i];
    }
    return array;
}

<强> 1。 fill_ints([1,2,3,6,7,10,14,25],1)

返回值:(数组)

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, 24,25]

var data2 = [0,6,18,30];

<强> 2。 fill_ints(data2,1)

返回值:(数组)

[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23,24,27,30]

第3。 fill_ints(data2,3)

返回值:(数组)

[0,3,6,9,12,15,18,21,24,27,30]