2016-10-08 8 views
-2

私はminとmaxを得るためにreduceを2回呼び出していますが、instedは1回だけ呼び出して同じ結果を得ることができる方法です。 - 減らすために1回の呼び出しでこれを行う必要があります。 - 例えば、MINMAX([4、1、2、7、6])戻り[1,7]function minMax(items){items.reduce([最小、現在)最小<現在?最小:現在)};

function minMax(items) 
{ 
    return [items.reduce((prev, curr)=> Math.min(prev, curr)), 
      items.reduce((prev, curr)=> Math.max(prev, curr))] 
} 
+0

実際のタイトルを教えてくださいは... – Li357

+1

だけ使用し ' [Math.min(... items)、Math.max(... items)] 'を返します。 – Xufox

+0

@Xufox Nice :) ,,唯一のことは、OPが言う - > 'これを行う必要があります単一の呼び出しを減らすために'。私はなぜそれがあったのか分かりませんが、好奇心のために速いパフォーマンステストをすると思っていましたが、reduceを使うのは2倍以上でした。私はreduceがシングルパスを行っているという事実だけではないと仮定していますが、シングルパスで実行するとCPUキャッシングに役立ちます。しかし、とにかく、私はまだあなたの答えは、親指に値すると思います:)。 – Keith

答えて

0

それはで動作することが可能だが同時に複数のものに減らす、inital値配列、オブジェクトなど何でもかまいません。

以下はあなたの後ろのものです。

var values = [33,2,48,23,1,45,23,311,312,32,32] 
 

 
function minMax(items) { 
 
return items.reduce(function (a,b) { 
 
     a[0] = Math.min(a[0], b), 
 
     a[1] = Math.max(a[1], b); 
 
     return a; }, 
 
    [+Infinity, -Infinity]) 
 
} 
 

 
console.log(minMax(values));

+0

ありがとうalot man! –

0

ただ、数学にバインドされたアプライと数学の最小値と最大値を使用しています。)

const nums = [4, 1, 2, 7, 6]; 
 

 
const minMax = numbers => [Math.min.apply(Math, numbers), Math.max.apply(Math, numbers)]; 
 

 
console.log(minMax(nums));

関連する問題