我面对的是一件非常奇怪的事(至少对我来说很奇怪)。 我正在尝试对数组中的项目进行排序,但在Chrome和Safari中收到的结果却截然不同。
请在CHROME中查看我的JSFIDDLE,然后在Safari
中查看Chrome有正确的顺序,应该是:
Funny Pig 1
Funny Pig 2
Funny Pig 3
Angry Lion 1
Angry Lion 2
Little Rabbit 1
Little Rabbit 2
有什么想法?
答案 0 :(得分:1)
排序不一定是stable。
虽然你只按名称部分排序,直到第一个空格,排序算法选择一个同名的地方,这个地方不尊重数值。
要解决此问题,您还可以按数值排序。
最后一次排序之前的任何排序都会被更改。
您需要具有多个空格的字符串使用不同的方法,因为您有两个空格三个元素。现在它不使用start处的数值和字符串末尾的数值。
var animals_order = 'Funny Pig, Angry Lion, Little Rabbit',
data = [{ result: [{ name: "Angry Lion 2" }, { name: "Funny Pig 1" }, { name: "Funny Pig 2" }, { name: "Angry Lion 1" }, { name: "Funny Pig 3" }, { name: "Little Rabbit 2" }, { name: "Little Rabbit 1" }] }];
function order () {
data.forEach(item => {
item.result.sort((a, b) => {
var [aName, aValue] = a.name.split(/\s(?=\d)/),
[bName, bValue] = b.name.split(/\s(?=\d)/);
return animals_order.indexOf(aName) - animals_order.indexOf(bName) || aValue - bValue;
});
});
}
function display() {
data[0].result.forEach(assignment => {
document.getElementById('divID').innerHTML += "<br />" + assignment.name;
});
}
order();
display();
&#13;
<div id="divID"></div>
&#13;