使用项目分数对对象数组进行排序

时间:2021-02-02 22:48:20

标签: javascript arrays loops sorting object

我想对数组进行排序

var highscores = [
{Username: "joba_gm11", Score: "20"},
{Username: "nika.jobava45", Score: "20"},
{Username: "trollgamer481", Score: "100"},
{Username: "Gimira", Score: "20"},
{Username: "dirtytank481", Score: "50"},
];

使用此代码:

for (var i = 0; i < highscores; i++) {
    for (var j = 0; j < highscores; j++) {
        if (highscores[i].Score < highscores[j].Score) {
            var temp = highscores[i];
            highscores[i] = highscores[j];
            highscores[j] = temp;
        }
    }
}

但它不起作用。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在比较分数之前,您可能需要将分数转换为数字。将它们作为字符串进行比较是按字母顺序进行比较。

答案 1 :(得分:1)

您可以使用 + 在 JavaScript 中将字符串转换为数字。

假设您正在尝试使用当前代码实现冒泡排序:

const highscores  = [
    {
        "Username": "joba_gm11",
        "Score": "20"
    },
    {
        "Username": "nika.jobava45",
        "Score": "20"
    },
    {
        "Username": "trollgamer481",
        "Score": "100"
    },
    {
        "Username": "Gimira",
        "Score": "20"
    },
    {
        "Username": "dirtytank481",
        "Score": "50"
    }
];


let sorted = false;
while (!sorted) {
    sorted = true;
    for (let i = 1; i < highscores.length; i++) {
        if (+highscores[i - 1].Score > +highscores[i].Score) {
            sorted = false;
            let temp = highscores[i - 1];
            highscores[i - 1] = highscores[i];
            highscores[i] = temp;
        }
    }
}

console.log(highscores);

如果允许您使用更高效的内置排序:

const highscores  = [
    {
        "Username": "joba_gm11",
        "Score": "20"
    },
    {
        "Username": "nika.jobava45",
        "Score": "20"
    },
    {
        "Username": "trollgamer481",
        "Score": "100"
    },
    {
        "Username": "Gimira",
        "Score": "20"
    },
    {
        "Username": "dirtytank481",
        "Score": "50"
    }
];

highscores.sort((a, b) => +a.Score - (+b.Score));

console.log(highscores);