0

I have a string array that stores in LocalStorage. Every element of this array is a string "Name:Score". I need to sort this array by score to build a top. How can i do it more effectively? Maybe i should store player's statistics not like an array for more easy sorting.

My code so far:

function saveResult() {
    let userName = $("#input-user-name").val();
    let userStat = userName + ":" + playerScore;
    results = localStorage.getItem("gameResults");
    if (results === null) {
        localStorage.setItem("gameResults", JSON.stringify([userStat]));
    } else {
        results = JSON.parse(localStorage.getItem("gameResults"));
        results.push(userStat); //sort 
        localStorage.setItem("gameResults", JSON.stringify(results));
    }
    updateStatTable();
}
georg
  • 211,518
  • 52
  • 313
  • 390
Sharky
  • 3
  • 3

3 Answers3

2

Probably build a real object array:

var users = yourArray.map(str => {
  let [name,score] = str.split(":");
  return {name,score:+score};
});

So the array looks like this:

[
{
name:"John",
score:0
}
...
]

Now you can simply sort:

users.sort((a,b)=>a.score - b.score);
Jonas Wilms
  • 132,000
  • 20
  • 149
  • 151
1

It is quite simple with sort():

var arr = ['John:32', 'Jack:45', 'Mary:25']

arr.sort((a, b) => a.split(':')[1] < b.split(':')[1])

console.log(arr)
kulaeff
  • 453
  • 3
  • 12
0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>


<div id="playersDiv"></div>
<input type="button" id="test1" value="Test Button" onclick="sortPlayers()"/>

<script type="text/javascript" language="javasscript">
var player1;
var player2;
var player3;
var players;
function sortbyScore(x,y){
    if(parseInt(x.score) < parseInt(y.score)){
        return -1;
    }
    else if(parseInt(x.score) > parseInt(y.score)){
        return 1;
    }
    else{
        return 0;
    }
}
function sortPlayers(){
    players.sort(sortbyScore)
    displayPlayers(players)
}

function displayPlayers(arr){
$("#playersDiv").html("")
    var tableString = "<table><tr><td>Player Name</td><td>Score</td></tr>"
    for(var i = 0;i<arr.length;i++){
        tableString += "<tr><td>" + arr[i].name + "</td><td>" + arr[i].score + "</td></tr>"
    }
    tableString += "</table>"
    $("#playersDiv").html(tableString)
}

$(document).ready(function() {
    player1 = {name:"Player 1", score:"5"};
    player2 = {name:"Player 2", score:"10"};
    player3 = {name:"Player 3", score:"25"};
    players = [player3,player1,player2]
    displayPlayers(players)
});



</script>