javascript - 排序后的 JavaScript 数组如何从比较器返回不正确的值?

标签 javascript sorting

假设我有一个项目列表,这些项目是使用给定的比较器排序的。我希望在升序排序后 comparator(element[1], element[1+n]) 应该为 n> 1 的所有值返回 -1,因为根据该比较器,element[1]

我正在执行自定义排序,发现排序后存在 comparator(element[1], element[1+n]) 返回 1 的实例。当我查看该实例时,我发现比较器给出正确的输出,即 element[1]>element[1+n]。我不明白使用该比较器执行排序后怎么会出现这种情况。

如果有人对我可能错过的微妙之处有任何想法,我真的很感激他们的想法。另外,如果我可以提供更多可能有所启发的信息,请告诉我。

编辑 我认为这可能是一个更普遍的问题,但为了响应 mplungjan,添加了下面的自定义排序器。 该排序适用于对象平面列表形式的分层数据集。每个对象都有一个 id,可能如下所示: 0 代表根 1。 第一个 child 0-0。 第二个 child 0-1。 等等

列表中的每个对象都有一个“parent”字段,其中包含其父对象的 ID。本质上 data.sort 没有做我认为应该做的事情。

function CurrencyTreeSorter(a, b) {

    a_id = a.id.split("-");
    b_id = b.id.split("-"); 

    if(a_id.length != b_id.length || a_id.slice(0, a_id.length-1).toString() != b_id.slice(0, b_id.length-1).toString()){
        var i = 0;
        while (i < a_id.length && i < b_id.length && a_id[i] == b_id[i]) {
            i++;
            }

        if (i == a_id.length || i == b_id.length){
            return a_id.length > b_id.length ? 1 : -1;
        }
        else{   
            while (a.level > i) {
                a = getParent(dataMap, a);
            }

            while (b.level > i) {
                b = getParent(dataMap, b);
            }
        }
    }

    var x, y;
    if (a[sortcol] == "-") {
        x = -1;
    }
    else {
        x = parseFloat(a[sortcol].replace(/[,\$£€]/g, ""));
    }

    if (b[sortcol] == "-") {
        y = -1;
    }
    else {
        y = parseFloat(b[sortcol].replace(/[,\$£€]/g, ""));
    }

    return sortdir * (x == y ? 0 : (x > y ? 1 : -1));

}

最佳答案

事实证明这是 Chrome 的问题,描述为 herehere 。本质上,从比较器/比较器返回零是不安全的。

关于javascript - 排序后的 JavaScript 数组如何从比较器返回不正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743654/

相关文章:

java - 基于对象属性对 ArrayList 进行排序

javascript - 如何动态缩放pdf图像

javascript - polymer iron-ajax在循环中调用多次

javascript - OpenID:支持电子邮件/密码和 OpenID 的单一用户界面

algorithm - 排序数组的相对质量

php - 自定义排序字符串——如果以特定字符串开头,则按字母顺序排列

javascript - React 路由到具有不同 URL 的同一组件

带有参数的 Javascript 警报

wpf - 使 WPF ListView/GridView 在列标题单击时排序的最佳方法?

python - 如何在 Numpy 中重复行并保持顺序?