2017-08-04 203 views
0

我写了一个函数,它返回n个给定数组中数字的最大和最小差异。它似乎工作,但我想消除零作为最小差异。我也希望能够连接两个以上的数组,当输入超过两个时。最大和最小差异

function maxAndMin(arr1,arr2){ 
    var maxi =0; 
    var mini =0; 

    var newarr = arr1.concat(arr2); 

    maxi = Math.max.apply(null,newarr)-Math.min.apply(null,newarr); 

newarr = newarr.sort(function(a, b) { 
    return a - b; }); 

    for (var i=0; i<newarr.length; i++){ 
     if (newarr[i+1] - newarr[i] < mini) 
      mini = newarr[i+1] - newarr[i]; 

    } 
    return [maxi, mini]; 
} 
+0

通常的答案是使'-Infinity'您最初的'maxi'和'Inf​​inity'您最初的'mini',但将不会使用'sort'的逻辑工作。 –

+0

为什么是循环?为什么这样? –

+0

@ t.j.crowder maxi被重置... –

回答

-1
function maxAndMin(...arr){ 
    var difference = []; 
    arr.reduce((a,b)=>[...a,...b]) 
    .sort((a,b)=>a-b) 
    .reduce((before,now)=>(difference.push(now - before),now),0); 
return [Math.max(...difference)||1,Math.min(...difference)||1]; 
} 

您可以使用其他参数来捕获所有传入数组中的数组。然后你可以将这个数组统一到一个数组中,对其进行排序,并减少差异。然后简单地返回它的math.max/min。 你可以用或运营商更换0:

0 || 1 => 1 
5 || 1 => 5 

In action

+0

我没有一点你的代码。请解释。 – Hoslack

+0

@hoslack是啊,我会解释什么时候完成改进 –

+0

什么是... ARR? – Hoslack