2016-07-14 13 views
0

Mein erstes Mal hier, ich weiß, ich sollte besser in Arrays sein, aber aus irgendeinem Grund stempelt dieser mich ... Ich erstelle ein 4-Spieler-Spiel jeder Spieler bekommt eine Nummer die niedrigste verliert aber ... Die So wie ich es mache, finde ich nur den ersten niedrigsten Wert im Array und aber es scheint die identische Zahl zu ignorieren, obwohl sie beide die niedrigsten sind.
ich ein Array haben ...Math.min wählt nur die ersten identischen Werte in einem Array aus. Wie kann ich die anderen finden?

var tilesInit = new Array(); 
tilesInit = { 
    a:9, 
    b:9, 
    c:11, 
    d:22 
} 

Dann für Ich überprüfe den höchsten und den niedrigsten ...

//Find largerest number// 
var max = Math.max.apply(null, Object.keys(scores).map(function(e) { return scores[e]; })); 
//Find losing player// 
var loser = scores.indexOf(max); 
//Find lowest number// 
var min = Math.min.apply(null, Object.keys(scores).map(function(e) { return scores[e]; })); 
//Find winning player// 
var winner = scores.indexOf(min); 
// 
// 
console.log("Losing score is: "+max+"\n Losing player is player: "+loser); 
console.log("Winning score is: "+min+"\n Winning player is player: "+winner); 

Aber ich auf einem Weg stapfte es noch einmal zu überprüfen die Indexnummer zu finden seine Innenseite „var min“ s .apply() Funktion der anderen niedrigste Zahl ich gehe davon aus, aber ich kann es nicht herausgefunden

Danke für Ihre Hilfe scheint, Byron

+2

Also was willst du, willst du alle Schlüssel in deinem Objekt abrufen, die die niedrigsten Punktzahlen haben? (Btw, 'tileInit' mit' new Array() 'zu initialisieren macht keinen Sinn, da du es später als Objekt definierst.) –

Antwort

1

Die einfachste Sache nur sein, kann es von Hand zu tun:

var scores = { 
    a: 9, 
    b: 9, 
    c: 11, 
    d: 22, 
}; 

function findAllMinimum(scores) { 
    var minSoFar = Infinity; 
    var minScorers = []; 

    Object.keys(scores).forEach(function (player) { 
    var score = scores[player]; 
    if (score < minSoFar) { 
     minSoFar = score; 
     minScorers = [player]; 
    } else if (score === minSoFar) { 
     minScorers.push(player); 
    } 
    }); 

    return minScorers; 
} 

console.log(findAllMinimum(scores)); 

// Output: 
// [ 'a', 'b' ] 

EDIT

Hier ist eine knappere aber weniger effizient Option lodash mit:

function findAllMinimum(scores) { 
    return _.invertBy(scores)[_.min(_.values(scores))]; 
} 

Eine weitere lodash Lösung, mehr effizienter als die vorherige, aber immer noch schlechter als das "von Hand" Beispiel oben:

function findAllMinimum(scores) { 
    var minScore = _.min(_.values(scores)); 

    return _.filter(_.keys(scores), function (key) { 
    return scores[key] === minScore; 
    }); 
} 
+0

Wow, danke für deine schnelle Antwort auf meine Frage –