2016-08-27 1 views
-2

Gibt es eine einfache Möglichkeit, eine maximale Anzahl in einem Array unten in JavaScript zu finden?Suchen einer maximalen Zahl in einem Array in JavaScript

[3,4,[22,21],5,9,5] 

Math.max.apply(null,numbers) gibt NaN.

+1

'[22,21]' ist keine Zahl. Wie sollte man das bei der Bestimmung der Max zählen? – Barmar

+3

@ KT B: Die Lektion hier ist: 1. Seien Sie präzise, ​​wenn Sie Ihre Frage stellen. 2. Fügen Sie erwartete Ergebnisse ein. 3. * Bleib 'bei dir herum, nachdem du sie gefragt hast, ob es nötig ist. –

+0

sollte es gerade als unklar geschlossen haben, was Sie vor 53 Minuten gefragt und weggegangen sind –

Antwort

3

Ihr Beispiel ist ein Array mit einem anderen Array verschachtelt eine Ebene tief. Unter der Annahme, nur eine Ebene der Verschachtelung, erster flatten the array Sie, dann wenden Sie den Math.max Trick dabei:

var a = [3,4,[22,21],5,9,5]; 
 
var max = Math.max.apply(Math, [].concat.apply([], a)); 
 
console.log(max);

+0

@torazaburo: In der Tat so. Ich habe diesen Vorbehalt hinzugefügt. –

2

Hier ist eine Lösung, die eine Version von reduce verwendet, die verschachtelten Arrays behandelt.

function nestedReduce(array, fn, initial) { 
 
    return array.reduce(function(result, elt) { 
 
    return fn(result, Array.isArray(elt) ? nestedReduce(elt, fn, initial) : elt); 
 
    }, initial); 
 
} 
 

 
console.log(nestedReduce([3,4,[22,21],5,9,5], Math.max, -Infinity));

Dies wird jede Ebene der Verschachtelung behandeln.

2

Sie könnten eine Rekursion mit Array#reduce verwenden.

Dies funktioniert für mehrere verschachtelte Arrays.

var array = [3, 4, [22, 21], 5, 9, 5, [[[42]]]], 
 
    maxValue = array.reduce(function max(r, a, i) { 
 
     var v = Array.isArray(a) ? a.reduce(max, undefined) : a; 
 
     return !i || r < v ? v : r; 
 
    }, undefined); 
 

 
console.log(maxValue);

Bearbeiten von torazaburo mit -Infinity und Math.max vorgeschlagen.

var array = [3, 4, [22, 21], 5, 9, 5, [[[42]]]], 
 
    maxValue = array.reduce(function max(r, a, i) { 
 
     return Math.max(r, Array.isArray(a) ? a.reduce(max, -Infinity) : a); 
 
    }, -Infinity); 
 

 
console.log(maxValue);

+2

Um die Semantik von 'Math.max' beizubehalten, sollte das Maximum eines leeren Arrays '-Infinity' sein, nicht' undefiniert'. Damit könntest du auch den '! I' Check überspringen. –

+0

Auch ich habe nicht verwendet reduzieren - :) – Redu

1

ich wie folgt tun würde;

function getMax(a){ 
 
    return Math.max(...a.map(e => Array.isArray(e) ? getMax(e) : e)); 
 
} 
 
var arr = [3, 4, [22, 21], 5, 9, 5, [[[42]]], 41]; 
 
console.log(getMax(arr));

Verwandte Themen