2017-04-20 63 views
0

此时函数确实返回第二大数,但我不确定它为什么不适用于负数?在函数中包含负数以查找数组中的第二大整数

function findSecondLargeNumber(arr) { 
 

 
    var firstLargeNum = 0, 
 
    secondLargeNum = 0; 
 

 
    for (var i = 0; i < arr.length; i++) { 
 
    if (firstLargeNum < arr[i]) { 
 
     secondLargeNum = firstLargeNum; 
 
     firstLargeNum = arr[i]; 
 
    } else if (secondLargeNum < arr[i]) { 
 
     secondLargeNum = arr[i]; 
 
    } 
 
    } 
 
    return secondLargeNum; 
 
} 
 

 
console.log(findSecondLargeNumber([1, 4, 5, 6])) //returns 5 
 
console.log(findSecondLargeNumber([-1, -2])) //returns 0 not -1

+4

???由于负数都小于零? – Pointy

+1

将你的两个变量初始化为'Number.NEGATIVE_INFINITY',它应该可以工作。 – Pointy

+0

@Pointy,但答案应该基于数组中的值...不是? –

回答

1

上添加名为testVal和math.abs你是罚款

function findSecondLargeNumber(arr){ 
 
    
 
     var firstLargeNum = 0, 
 
      secondLargeNum = 0; 
 
    
 
     for(var i=0; i<arr.length; i++){ 
 
     var testVal = Math.abs(arr[i]); 
 
     if(firstLargeNum < testVal) { 
 
      secondLargeNum = firstLargeNum; 
 
      firstLargeNum = arr[i];   
 
     } else if(secondLargeNum < testVal){ 
 
      secondLargeNum = arr[i]; 
 
     } 
 
     } 
 
     return secondLargeNum; 
 
    } 
 
    
 
    console.log(findSecondLargeNumber([1, 4, 5, 6])) 
 
    console.log(findSecondLargeNumber([-1, -2]))

+2

当输入数组为[[-1,-2]' – Pointy

+1

时,OP希望函数返回'-2'什么不,编辑帖子? – FrankCamara

+0

@FrankCamara对不起,我犯了一个错误,我编辑它。我知道我可以用'MDN'这个'Math.abs'方法,但是你能为后代增加一个小的解释吗? –

1

这个怎么样:

function findSecondLargeNumber(arr) { 
 
    return arr.sort(function(a, b) { 
 
    return a - b 
 
    })[arr.length - 2]; 
 
} 
 

 
console.log(findSecondLargeNumber([-5,-3,-2,3,6,2])) //returns 3

+3

这将得到正确的答案,但它会花费更多时间,而不是像OP代码那样的简单线性传递,它也会重新排列数组。 – Pointy

+0

@Pointy他可以复制数组 – mplungjan

1

尝试这种解决方案:

function findSecondLargeNumber(arr){ 
    const sortedArray = arr.sort((v1, v2)=> v2 - v1); 
    return sortedArray[1]; 
} 
+0

这是行不通的,但箭头功能还没有广泛使用。 – Robert

+1

与@ Robert's相同http://stackoverflow.com/a/43519550/295783 – mplungjan

1

清洁的代码尝试(尽管它重新排列的数组元素)

arr.sort((e,f) => (f-e))[1] 

对于在博物馆展出作为伪像的浏览器

arr.sort(function(a,b){return b-a})[1]; 
+0

简而言之,请注意:不适用于IE11(https://caniuse.com/#search=arrow%20functions) – Robert

相关问题