2016-10-20 3 views
2

Ich habe einige Probleme, wie man den größten Wert der Karte, die ich bekommen habe, tatsächlich bekommen. Momentan zeigt mein Code nur die tatsächlichen gezählten Werte jedes Schlüssels an, ich bleibe bei dem Versuch, das Max zu protokollieren, was ich denke, passiert in meinem Code, ist die for-Schleife durch das counts [key] -Array, aber es wird bleiben bei 1, was der erste Wert ist und stoppt, weil die einzige Nummer, die geloggt wird, 1 ist. Ich erwarte nicht die tatsächliche Antwort, vielleicht einige Tipps und Hinweise, die mich auf die richtige Weise führen würden. Danke im Voraus.Berechnung mit Javascript

var Mode = function(data) { 
 
    var counts = {}; 
 
    for (let i = 0; i < data.length; i++) { 
 
     counts[data[i]] = (counts[data[i]] + 1) || 1; 
 
    } 
 
    for (var key in counts) { 
 
     if (counts.hasOwnProperty(key)) { 
 
      var maxValue = Math.max(counts[key]); 
 
     } 
 
    } 
 
    return maxValue; 
 
} 
 
console.log(Mode([1, 5, 2, 3, 3, 4, 4, 4]));

+0

Was ist die richtige Antwort? 4 oder 5? –

+0

die richtige Antwort wäre 3, da mein Code tatsächlich jeden Array-Wert aus Daten zählt, also im Grunde ist es "1" = 1; '2' = 2; '3' = 2; '4' = 3; '5' = 1; Was ich eigentlich suche, ist, die tatsächlich gezählten Zahlen des Datenarrays zu vergleichen, weshalb ich all diese in eine Karte einfüge und jetzt versuche ich, jeden der Werte zu vergleichen und die richtige Antwort – Siegfried

+1

zu loggen Aber "4" hat die höchste Anzahl in Ihrem Beispiel. – Walf

Antwort

0

ich habe endlich dieses Problem gelöst, indem den folgenden Code verwenden :

var Mode = function(data) { 
var counts = {}; 
for (let i = 0; i < data.length; i++) { 
    counts[data[i]] = (counts[data[i]] || 0) + 1 
} 
var max = 0; 
var values = []; 
for (var key in counts) { 
    if (counts.hasOwnProperty(key)) { 
     if (counts[key] > max) { 
      max = counts[key]; 
      values = [key]; 
     } else if (counts[key] === max) { 
      max = counts[key]; 
      values.push(key); 
     } 
    } 
} 
return "The highest value is " + values.join(", ") + " with a count of " + max; 
} 
console.log(Mode([1, 2, 3, 3, 4, 4])); 

Vielen Dank für Ihre Hilfe :).

1

Sie müssen ah höhere Anzahl von Zählung in diesem array.try diese

var max =0; 
 
var Mode = function(data) { 
 
    var counts = {}; 
 
    for (let i = 0; i < data.length; i++) { 
 
     counts[data[i]] = (counts[data[i]] + 1) || 1; 
 
    } 
 
    for (var key in counts) { 
 
     if (counts.hasOwnProperty(key)) { 
 
      if(counts[key] > max){max=counts[key];} 
 
      
 
     } 
 
    } 
 
    return max; 
 
} 
 
console.log(Mode([1, 5, 2, 3, 3, 4,4, 4, 4]));//4 is a higher count 
 
console.log(Mode([ 5,5,5,5,5,5,5, 2, 3, 3, 4, 4]));//5 is higher count

+1

Nur ein Kommentar ... es ist Konvention, Funktionen mit einem Großbuchstaben ersten Buchstaben mit "New Mode()" zu starten. Nur vorbeikommender Kommentar :) –

Verwandte Themen