假设我有一个项目列表,这些项目是使用给定的比较器排序的。我希望在升序排序后 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));
}
最佳答案
关于javascript - 排序后的 JavaScript 数组如何从比较器返回不正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743654/