2016-10-08 4 views
-2

Ich rufe zwei mal runter, um die min und max zu bekommen aber da ist ein Weg den ich anrufen kann nur einmal reduzieren und das selbe Ergebnis bekommen - Muß dies mit einem einzigen Anruf reduzieren. - Zum Beispiel minmax ([4, 1, 2, 7, 6]) gibt [1, 7]Funktion minMax (Elemente) {items.reduce ([kleinste, aktuelle] kleinste <aktuelle? Kleinste: aktuelle)};

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

Bitte einen tatsächlichen Titel geben ... – Li357

+1

Verwenden Sie einfach ' return [Math.min (... Elemente), Math.max (... Elemente)] '. – Xufox

+0

@Xufox Schön :) ,, Die einzige Sache ist das OP sagt -> 'Muss dies tun, indem Sie einen einzigen Anruf zu reduzieren '. Ich bin nicht sicher, warum es sein musste, aber aus Neugierde dachte ich, ich würde ein paar schnelle Leistungstests machen, und die Verwendung von Reduce war mehr als doppelt so schnell. Ich gehe davon aus, dass es nicht nur auf die Tatsache zurückzuführen ist, dass reduce auch nur einen einzigen Durchlauf ausführt, aber es in einem einzigen Durchgang hilft, CPU-Caching durchzuführen. Aber wie auch immer, egal, ich denke immer noch Ihre Antwort verdient einen Daumen hoch .. :) – Keith

Antwort

0

Es ist möglich, mit verringern auf mehr als eine Sache zu einer Zeit, zu arbeiten, der Anfangswert kann alles sein, Arrays/Objekte usw.

Unten sollte etwas sein, was Sie nach.

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

Vielen Dank Mann! –

0

Verwenden Sie einfach Math min und max mit bis Math gebunden gelten;)

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

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

 
console.log(minMax(nums));