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
.
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
.
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);
@torazaburo: In der Tat so. Ich habe diesen Vorbehalt hinzugefügt. –
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.
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);
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. –
Auch ich habe nicht verwendet reduzieren - :) – Redu
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));
'[22,21]' ist keine Zahl. Wie sollte man das bei der Bestimmung der Max zählen? – Barmar
@ 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. –
sollte es gerade als unklar geschlossen haben, was Sie vor 53 Minuten gefragt und weggegangen sind –