对两个数组进行排序在两位数字上失败

sorting two arrays fails on two digit numbers

本文关键字:两位 数字上 失败 排序 两个 数组      更新时间:2023-09-26

我正在尝试创建一个函数,该函数将采用以下两个数组:(数据在其他地方填写)

var playerImport = []
playerImport[0] = "";
playerImport[1] = "";
playerImport[2] = "";
playerImport[3] = "";
playerImport[4] = "";
var scoreImport = []
scoreImport[0] = "";
scoreImport[1] = "";
scoreImport[2] = "";
scoreImport[3] = "";
scoreImport[4] = "";

并将两个数组排序在一起。

例如,scoreImport[0] 是最低值,一旦排序,应该随身携带 playerImport[0]。

我目前将此作为我的功能。

function sortHighscores(a, b)
var swapped;  
do {  
    swapped = false;  
    for (var i=0; i < a.length-1; i++) {  
        if (a[i] > a[i+1])   
        {  
            var temp = a[i];  
            a[i] = a[i+1];  
            a[i+1] = temp;  
            var temp = b[i];  
            b[i] = b[i+1];  
            b[i+1] = temp;  
            swapped = true;  
        }  
    }  
} while (swapped);

虽然这有效,但如果我尝试对两个数组进行排序,并且一个或多个 scoreImport 包含两位数,而其余部分包含一个数字,它只是将其直接放在底部并且无法正确排序。例如,如果 scoreImport[4] = 20 并且其余为个位数数字,则 20 的值将排序为 scoreImport[0],也称为最小值。

如何让此函数理解对一位和两位数值的排序?面对这一挑战,它似乎崩溃了。

希望你明白我想要解释的内容。

提前非常感谢。

似乎您的值被排序为字符串,您可能知道"20" < "3".在比较之前将值转换为 Number s。例如+valueNumber(value)parseInt(value,10)

您正在对字符串进行排序,因此顺序在数字上不匹配。

您可以。。。

  1. 零填充存储的值,即"01"、"20"将正确排序。
  2. 在排序前的某个时间点转换为数值,请使用parseInt(number, 10);