ist dies gleich sind Let brechen in zwei Teilprobleme: Erstens, die Summe der Ziffern finden; zweitens, den maximalen Wert eines Arrays zu finden. Für die zweite haben wir bereits Math.max
.
Zum ersten, werden wir es brechen sogar noch weiter und zunächst nur eine Funktion schreiben, die Ziffern zu erhalten:
function digits(x) { return String(x).match(/\d/g).map(Number); }
Um die Ziffern zusammenzufassen, wir sagen nur
function sumDigits(x) { return sum(digits(x)); }
für sum
, können Sie viele Beispiele hier auf SO, aber die einfachste ist
function sum(array) { return array.reduce(add, 0); }
012 findenist einfach genug:
function add(a, b) { return a + b; }
, nun die maximale Summe von Ziffern von jedem Element eines Arrays zu erhalten:
function maxSumDigits(array) { return Math.max(...array.map(sumDigits)); }
Die oben verwendet ES6 Spread-Operator. In ES5:
return Math.max.apply(0, array.map(sumDigits));
Der Vorteil des Codes auf diese Weise ist das Schreiben zuerst, Sie mit nützlichen kleinen Dienstprogramme am Ende, die Sie wiederverwenden können; Zweitens ist der Code leichter zu lesen und beweist, dass es richtig ist; und drittens ist es einfacher, mit Spezifikationsänderungen umzugehen, wie zum Beispiel das Minimum statt des Maximums des Produkts aus Ziffern anstelle der Summe zu finden.
function digits(x) { return String(x).match(/\d/g) . map(Number); }
function sumDigits(x) { return sum(digits(x)); }
function sum(array) { return array . reduce(add, 0); }
function add(a, b) { return a + b; }
function maxSumDigits(array) { return Math.max(...array . map(sumDigits)); }
console.log(maxSumDigits([1234, 3456]));
dies die größte Summe zurückgibt. Um das Element, deren Ziffern haben die größte Summe zu finden, wäre der einfachste Weg, um die Anordnung von Summen von Ziffern zu erinnern, dann schauen Sie, dass bis:
function maxSumDigits(array) {
var sums = array . map(sumDigits);
var max = Math.max(...sums);
return array[sums.indexOf(max)];
}
Sie wollen „myNumbers“ Array in einer Reihenfolge sortiert werden? Was meinen Sie mit "Methode zu vergleichen"? Und num1, num2 sind jeweils Zahlen oder sie können ein Array von Zahlen sein? – Ayan
Was ist Ihr gewünschtes Ergebnis? Eine Methode wie [* reduce *] (http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.reduce) durchläuft die Elemente, wendet eine Funktion an und gibt ein einzelnes Ergebnis zurück. Aber Sie haben nicht gesagt, wie die Zahlen verglichen werden sollen oder was der tatsächliche Vergleich ist (größer, kleiner, ungerade, gerade, ...). – RobG
Danke für die Kommentare. Ich versuche, die Summe der einzelnen Elemente zu vergleichen, indem ich die Zahlen in diesem Element addiere und die größte Zahl zurücksende. Wenn also num1 = 1234, dann sollte die Summe von myNumbers [0] 10 sein. Beim Vergleich, wenn num2 = 3456, dann sollte die Summe 18 sein, die Funktion sollte num2 zurückgeben. – huisleona