2016-07-20 9 views
0

Ich versuche, eine Lösung für diese zu finden:die numerischen Werte der einzelnen Array-Eigenschaften in Javascript Vergleich

Benutzer werden aufgefordert, einen zufälligen Satz von Zahlen nacheinander eingeben:

var num1 = prompt("Enter 1st set of numbers"); 
var num2 = prompt("Enter 2nd set of numbers"); 
var num3 = prompt("Enter 3rd set of numbers"); 

var myNumbers =[num1, num2, num3]; 

Jetzt bin ich Versuch, die Summe der Ziffern in jedem Element des Arrays zu vergleichen. Zum Beispiel, wenn myNumbers [0] = 32, myNumber [1] = 45, was ist die Funktion, um 5 (3 + 2) und 9 (4 + 5) zu vergleichen?

Ich versuche, die Summe der einzelnen Elemente zu vergleichen, indem Sie die Zahlen in diesem Element hinzufügen und die größte Zahl zurückgeben. 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.

+0

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

+0

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

+0

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

Antwort

0

Wenn Sie die Liste nach den Summen der Ziffern sortieren möchten, können Sie Folgendes tun. Die Komparatorfunktion findet die Summe der Ziffern in den Mitgliedern der Liste und vergleicht sie dann. Wenn Sie nur die Ziffern in der Zeichenfolge summieren möchten, können Sie den Code, der das tut, auch aus dieser Lösung extrahieren.

myNumbers.sort(function(a,b) { 
    var sumA = 0; 
    var sumB = 0; 
    a.split("").forEach(function(digit) { 
     sumA+=parseInt(digit); 
    }); 
    b.split("").forEach(function(digit) { 
     sumB+=parseInt(digit); 
    }); 
    return sumA-sumB; 
}); 
+0

Die Summe der Ziffern immer und immer wieder jedes Mal, wenn die Vergleichsfunktion aufgerufen wird, scheint nicht so elegant. –

1

var num1 = prompt("Enter 1st set of numbers"); 
 
var num2 = prompt("Enter 2nd set of numbers"); 
 
var num3 = prompt("Enter 3rd set of numbers"); 
 

 
// finds the sum of your array, parsing each element as an integer 
 
var sum = function(array){ 
 
    var digits = array.split("") 
 
    return digits.reduce(function(a, b) {return parseInt(a, 10) + parseInt(b, 10)}) 
 
} 
 

 
var myNumbers =[num1, num2, num3] 
 
var findLargest = function(array){ 
 
    var answer 
 
    var largest = 0 
 
    array.forEach(function(input){ 
 
     // check if this is the largest sum 
 
     if (sum(input) == largest){ 
 
      // check if there is already a running set of equal sums 
 
    \t if (typeof(answer) == Object) answer.push(input) 
 
      // create set of equal sums if not 
 
      else answer = [answer, input] 
 
     } 
 
     else if (sum(input) > largest) { 
 
      largest = sum(input) 
 
      answer = input 
 
     } 
 
     }) 
 
     return answer 
 
    } 
 

 
alert(findLargest(myNumbers))

https://jsfiddle.net/gmebk2Ly/7/

Dies gilt auch, wenn es überprüft, mehrere Eingänge, die

+0

Gibt es einen besonderen Grund, warum Sie 'Math.max' nicht verwenden? –

+0

@torazaburo nein, aber das hört sich nach einer guten Empfehlung an :) – larz

+0

Sie wollten sicher '10' nicht' 0' zu 'parseInt'? – Bergi

0

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)]; 
} 
+1

viel eloquenter und gut erklärt als meine Antwort. Nur eine kurze Anmerkung - ich denke, dass sie suchen, welches ursprüngliche Einzelteil die höchste Summe zur Verfügung stellte, nicht die Summe selbst – larz

+0

Wirklich schätzen Sie @torazaburo. Habe gerade heute über map.() Und math.max() erfahren. – huisleona

Verwandte Themen