我有一系列连续的数字,但有些数据丢失了。我也知道增量步骤。
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执行此操作?
答案 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]