我有以下两个数组,它们总是预先排序的:
[1,2,4,5,8]
[x,x,x,x,x]
我需要插入缺少的元素并在相应的数组中,放入 y 以便输出可以是:
[1,2,3,4,5,6,7,8]
[x,x,y,x,x,y,y,x]
数据分别到达,但它们的大小始终匹配。
我已经尝试过以下方法,但我很确定我把它弄得太复杂了。
function action(numbers,data){
var len=numbers.length;
if (len<=1){
return [numbers,data];
}
var new_data=[] //stores new data
var new_number=[] //stores new numbers
for(var i=1;i<len;i++){
var diff=numbers[i] - numbers[i-1];
if(diff>1){
//there is gap here
var val=0;
diff--;
for(var j=0;j<diff;j++){
val=numbers[i-1] + j +1;
new_number.push(val)
new_data.push('y')
}
//put current info after missing data was inserted
new_number.push(numbers[i])
new_data.push(data[i])
}
}
//adjust first entry
new_number.unshift(numbers[0])
new_data.unshift(data[0])
return [new_number,new_data];
}
这不一致,我自己也无法遵循。
action([2002,2005,2007],['x','x','x']) =>[2002,2003,2004,2005,2006,2007], [x,y,y,x,y,x]
但以下是错误:
action([2002,2003,2007],['x','x','x']) =>[2002,2004,2005,2006,2007], [x,y,y,y,x]
输出应该是 2002,2003,2004,2005,2006,2007 和 x,x,y,y,y,x
更新
向 diff>1 添加 else 似乎可以修复上述错误,但解决方案一点也不优雅:
} else{
new_number.push(numbers[i])
new_data.push(data[i])
}
最佳答案
你们离得很近。我只需要移动几行。每次都需要将原始数字推送到新数组,而不仅仅是当差异太大时。
function tst(numbers, data){
var len=numbers.length;
if (len<=1){
return [numbers,data];
}
var new_data=[] //stores new data
var new_number=[] //stores new numbers
for(var i=1;i<len;i++){
var diff=numbers[i] - numbers[i-1];
if(diff>1){
//there is gap here
var val=0;
diff--;
for(var j=0;j<diff;j++){
val=numbers[i-1] + j +1;
new_number.push(val)
new_data.push('y')
}
}
//put current info after missing data was inserted
new_number.push(numbers[i])
new_data.push(data[i])
}
//adjust first entry
new_number.unshift(numbers[0])
new_data.unshift(data[0])
return [new_number,new_data];
}
console.log(tst([1,2,4,5,8],['x','x','x','x','x']));
关于javascript - 将缺失的数字插入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51087329/