javascript - 将缺失的数字插入数组中

标签 javascript

我有以下两个数组,它们总是预先排序的:

[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/

相关文章:

php - 将具有多个日期的字符串转换为 dd-mm-YYYY 格式

javascript - 将类添加到包含特定宽度图像的 div

javascript - 纯 JavaScript 中的 HashMap 示例

javascript - list : property 'start_url' ignored, 应与文档同源

javascript - ng hide,如何有条件地显示带有 url 扩展名的 Angular 内容

javascript - ajax 和 php 文件从输入上传 undefined index

javascript - 为什么当对象键是数字、连续且从0开始时,axios会将JSON对象转换为数组?

javascript - Discord.js 发送文件

javascript - 如何从本地日期时间获取小时?

javascript - 如果为负数,则将数字设为 ASCII