对字符串数组进行排序,其中元素如 "Name:Score"



我有一个存储在LocalStorage中的字符串数组。此数组的每个元素都是一个字符串"名称:分数"。我需要按分数对这个数组进行排序以构建顶部。我怎样才能更有效地做到这一点? 也许我应该存储玩家的统计数据,而不是像数组那样更容易排序。

到目前为止我的代码:

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();
}

可能构建一个真正的对象数组:

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

所以数组看起来像这样:

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

现在您可以简单地排序:

users.sort((a,b)=>a.score - b.score);

使用sort()非常简单:

var arr = ['John:32', 'Jack:45', 'Mary:25']
arr.sort((a, b) => a.split(':')[1] < b.split(':')[1])
console.log(arr)

<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>

最新更新