IE Array.sort 不使用比较功能排序
IE Array.sort not sorting with compare function
这是在 IE 11 中无法正常工作的代码示例。
id = END3 的元素应该是最后一个。
就是别告诉我需要手动写排序。实施起来没什么大不了的,但真的吗?!
var list = [{
id: "SP1"
},
{
id: "SP4"
},
{
id: "END3"
},
{
id: "SP2"
}
];
console.log(
list.sort(function(a, b) {
if (a.id === "END3") {
return 1;
}
return 0;
})
);
Return -1
而不是 else 块中的 0
。当比较方法 returns 0
它保持 a
和 b
不变。
var list = [{
id: "SP1"
},
{
id: "SP4"
},
{
id: "END3"
},
{
id: "SP2"
}
];
console.log(
list.sort(function(a, b) {
if (a.id === "END3") {
return 1;
}
return -1;
})
);
您的排序比较函数运行不一致。该函数应该 return < 0
、0
或 > 0
,而不仅仅是 1
或 0
.如果它没有 returning 这些值,那么您将向 sort
提供错误的信息,因为您告诉它任何 a
不是所需值的比较都是相等的。不能保证 END3
会在任何时候作为 a
传递,因此所有比较都将是 "equal",因此未定义实际结果是什么。也有可能SP1, END3
("equal")和END3, SP1
("greater")的不一致会影响排序算法的假设。
var list = [{id: "SP1"}, {id: "SP4"}, {id: "END3"}, {id: "SP2"}];
console.log(list.sort(function(a, b) {
if (a.id === 'END3') {
return 1;
} else if (b.id === 'END3') {
return -1;
} else {
return 0;
}
}));
这是在 IE 11 中无法正常工作的代码示例。
id = END3 的元素应该是最后一个。
就是别告诉我需要手动写排序。实施起来没什么大不了的,但真的吗?!
var list = [{
id: "SP1"
},
{
id: "SP4"
},
{
id: "END3"
},
{
id: "SP2"
}
];
console.log(
list.sort(function(a, b) {
if (a.id === "END3") {
return 1;
}
return 0;
})
);
Return -1
而不是 else 块中的 0
。当比较方法 returns 0
它保持 a
和 b
不变。
var list = [{
id: "SP1"
},
{
id: "SP4"
},
{
id: "END3"
},
{
id: "SP2"
}
];
console.log(
list.sort(function(a, b) {
if (a.id === "END3") {
return 1;
}
return -1;
})
);
您的排序比较函数运行不一致。该函数应该 return < 0
、0
或 > 0
,而不仅仅是 1
或 0
.如果它没有 returning 这些值,那么您将向 sort
提供错误的信息,因为您告诉它任何 a
不是所需值的比较都是相等的。不能保证 END3
会在任何时候作为 a
传递,因此所有比较都将是 "equal",因此未定义实际结果是什么。也有可能SP1, END3
("equal")和END3, SP1
("greater")的不一致会影响排序算法的假设。
var list = [{id: "SP1"}, {id: "SP4"}, {id: "END3"}, {id: "SP2"}];
console.log(list.sort(function(a, b) {
if (a.id === 'END3') {
return 1;
} else if (b.id === 'END3') {
return -1;
} else {
return 0;
}
}));