为什么numberArray.sort()没有在JavaScript中正确排序数字?

时间:2012-06-27 02:39:53

标签: javascript sorting

我正在练习数据可视化库d3.js,我正在使用与以下内容相同的随机数据生成器:

function generateRandomData() {
    var i,
        data = [];
    for (i = 0; i < 100; i += 1) {
        data.push(Math.random() * 100);
    }
    return data;
}

我存储了值并尝试对其进行排序,如下所示:

var data = generateRandomData();
data.sort();

不幸的是,已排序的数据集未完全排序 - 某些值实际上是不正确的。例如,我会有[12,15,18,21,3,18 ......]等数字。 sort函数的不准确性是什么原因造成的?

注意:我找到了一个合适的解决方案,解决了我的问题:

data.sort(function (a, b) { return b - a; });

我只想知道为什么sort()不可靠。

1 个答案:

答案 0 :(得分:2)

如果没有自定义排序函数调用它,

sort()函数会将Array中的所有内容视为String。

唯一的例外是undefined,它来自Javascript 1.2,它总是排序数组中的“最大”项。

[void(0),342,4.5,"ahahaha",null,"zzz", "nen", "nup", 0/0, "KDSFL", "-sdfh",-3324, "-%",Array.prototype.sort,window,Array.zzz,"[oooooo]", "undefined",0].sort()

参考:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort