这是在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 :(得分:1)
在else块中返回-1
而不是0
。当compare方法返回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;
})
);
答案 1 :(得分:1)
您的排序比较功能行为不一致。该函数应该返回 < 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;
}
}));