2017-08-04 15 views
0

与えられたn個の配列の最大と最小の差を返す関数を書いています。それは動作するようですが、私は最小限の違いとしてゼロを削除したい。私はまた、2つ以上の配列を連結することができるようにしたい。最大と最小の差

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

はいつもの答えはあなたの最初の 'mini'をInfinity'' '作るあなたの最初の' maxi'を-Infinity'とするだろうが、それあなたのロジックでは '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]; 
} 

あなたは、アレイ内のすべての渡された配列をキャッチするために、残りのパラメータを使用することができます。次に、この配列を1つの配列に統一し、並べ替えて、差異を減らすことができます。それからmath.max/minを返します。 そして、あなたは、またはオペレータに0を置き換えることができます。

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

In action

+0

私はあなたのコードの1ビットはありません。説明してください。 – Hoslack

+0

@hoslackええ、iveが改善を終えたとき、私は説明します –

+0

何が... arr? – Hoslack