2017-07-02 100 views
0

刚开始学习javascript。根据数组长度循环多个if语句

输入可能类似于。

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个数字输入然而,这并非总是如此,我相信这可以,如果你使用某种类型的循环进行编码清洁。你们能帮我吗?

回答

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

如果数组包含唯一的编号(即 - 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);

如果你也需要这些数字,创建一个现有数字的映射,然后创建一个数组, ntain不初始数组中存在的所有数字:

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);

+0

'4'不打印 –

+0

@Mr_Perfect - 请详细说明 –

+0

失踪数字是3,4,6正确的,但只打印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); 
1

任务是找出如何许多数字在最低数字和最高数字之间缺失

  1. 排序数字:这会给最小的数字和最大的数字。
  2. 减去最大的数字和最小的数字:这将给出可以包含该范围的总数。假设这是N
  3. 用N减去数组长度:这将给出给定数组中缺少数字的数目。

由于问题是要计算而不是列出所有缺失的数字,我们可以采取这种方法。以下是代码示例。

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)