以下代码示例在 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;
})
);
最佳答案
您的排序比较函数的行为不一致。该函数应该返回 < 0
, 0
,或> 0
,不仅仅是1
或0
。如果它没有返回这些值,那么您将给出 sort
使用错误的信息,因为您告诉它 a
中的任何比较期望值不相等。不能保证END3
将被传递为 a
在任何时候,所以所有比较都将是“相等的”,所以结果是不确定的。 SP1, END3
之间也可能存在不一致。 (“等于”)和 END3, SP1
(“更大”)会影响排序算法的假设。
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;
}
}));
关于javascript - IE Array.sort 不使用比较函数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651434/