基于数组长度循环多个if语句

时间:2017-07-02 07:16:42

标签: javascript

刚开始学习javascript。

输入可能就像。

1, 5, 2, 7

我的任务是弄清楚最低数字和最高数字之间缺少多少数字。

var sorted = statues.sort();
var ticker = 0;
var plusser = sorted[0] + 1;
var plusser1 = sorted[1] + 1;
var plusser2 = sorted[2] + 1;
var plusser3 = sorted[3] + 1;


if(sorted[1] != plusser) {
  ticker++
}
if(sorted[2] != plusser1) {
  ticker ++;
}
if(sorted[3] != plusser2) {
  ticker ++;
}
if(sorted[4] != plusser3) {
  ticker ++;
}

如果只有4个输入数量,那么效果很好,但情况并非总是如此,我相信如果使用某种循环,这可以编码更清晰。你能帮助我吗?

4 个答案:

答案 0 :(得分:1)

找到最大值和最小值并循环遍历数组并检查数字是否不是数组的一部分。

var arr = [1, 5, 2, 7];
var numberMissing = 0;
for(var i = Math.min.apply(Math, arr) + 1 ; i < Math.max.apply(Math, arr); ++i){
  if(arr.indexOf(i) === -1){
    console.log(i);
    ++numberMissing;
    }
}
console.log("Missing Number : " + numberMissing); 

答案 1 :(得分:1)

如果数组包含唯一的数字(即 - 5不能出现两次),则可以使用简单的数学运算:

var statues = [1, 5, 2, 7];

var result = 
  Math.max.apply(Math, statues) - Math.min.apply(Math, statues)  + 1 // the amount of items that should be in the array
  - 
  statues.length; // the current amount of items

console.log(result);

如果您还想要数字,请创建现有数字的地图,然后创建一个数组,其中包含初始数组中不存在的所有数字:

var statues = [1, 5, 2, 7];

function getMissingNumbers(arr) {
  var result = [];
  var map = arr.reduce(function(map, n) { // create a map of existing numbers
    map[n] = true;
    return map
  }, {});

  var max = Math.max.apply(Math, arr); // find the max
  var min = Math.min.apply(Math, arr); // find the min
  
  for(var i = min; i < max; i++) { // run from min to max
    map[i] || result.push(i); // add only numbers that don't exist in the map
  }
  
  return result;
}

var result = getMissingNumbers(statues);

console.log('Missing items: ', result);
console.log('Number of missing items: ', result.length);

答案 2 :(得分:1)

  

任务是弄清楚最低数字和最高数字之间缺少多少数字

  1. 对数字进行排序:这将提供最小的数字和最大的数字。
  2. 减去最大数字和最小数字:这将提供可包含在该范围内的总数。让我们说这是N
  3. 使用N减去数组长度:这将给出给定数组中缺少的数字。
  4. 由于问题是计算而不是列出所有缺失的数字,我们可以采用这种方法。以下是代码示例。

    &#13;
    &#13;
    var input = [1,5,2,7];
    var sortedInput = input.sort(); // this will work only for single digit array. 
    var firstNum = sortedInput[0],
        lastNum = sortedInput[sortedInput.length-1],
        numbersInRange = lastNum - firstNum +2; // +2 to include the numbers that are the range 
        
    var missingNumbers = numbersInRange - input.length;
    
    console.log(missingNumbers)
    &#13;
    &#13;
    &#13;

答案 3 :(得分:0)

以下是您可以尝试的简单解决方案:

var a = [1,5,2,7];
a.sort((a, b) => a-b)
 .reduce((acc, element, index) => { 
     if(index) acc = acc + element - a[index-1] - 1; return acc;
 }, 0);