javascript - 为什么我非常非常简单的排序函数返回一个未排序的列表

标签 javascript arrays list sorting

如果我这样做:

var my_list = ["g", "be", "d", "f", "hu", "i", "jc", "lu", "ma", "mi", "w"];
var sorted_list = my_list.sort(function(a,b) {
                        return a > b;
                       });
console.log(sorted_list);

我得到:

["i", "g", "d", "f", "be", "hu", "jc", "lu", "ma", "mi", "w"]

(如果我再试一次,我会得到不同的未排序结果)。

但是当我这样做的时候:

var my_list = ["g", "be", "d", "f", "hu", "i", "jc", "lu", "ma", "mi", "w"];
var sorted_list = my_list.sort();
console.log(sorted_list);

我得到了正确的排序结果:

["be", "d", "f", "g", "hu", "i", "jc", "lu", "ma", "mi", "w"]

我提供的排序功能有什么问题?

我不能在没有函数的情况下使用排序,因为在我的实际代码中,我正在尝试对对象进行排序。如果这行不通,是否有另一种方法可以按特定属性对我的对象进行排序?

最佳答案

比较函数应返回值 -1、0 或 1,具体取决于操作数的比较方式。

如果您只执行相等性检查(产生 0 或 1),排序结果将是不确定的,因为内部排序算法本质上是不稳定的。

这相当于标准排序:

if (a == b) {
    return 0;
} else if (a < b) {
    return -1;
} else { // a > b
    return 1;
}

以上内容不是很有用,仅用于说明应该存在哪些比较元素。

关于javascript - 为什么我非常非常简单的排序函数返回一个未排序的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22679243/

相关文章:

list - 迭代 OCaml 中的嵌套列表数据类型

javascript - 当 xaxis 是文本时,如何显示 jqplot 堆积条形图?

javascript - 有条件的 JS 调用 IE7?

javascript - 翻转从数组中调用图像

javascript - Lodash 从重复的对象键创建集合

c++ - 指向二维数组的指针的类型是什么?

python - 对于字典,将键和值与列表中的值进行比较

javascript - 以 Angular 获取api数据

javascript - 如何定义CSS :focus state in a jQuery selector?

python - 访问列表 Python 中的元素