我面临着非常奇怪的事情(至少对我来说很奇怪)。我试图在数组中对项目进行排序,但在Chrome和Safari中却得到了不同的结果。
请看一看我的CHROME和Safari的JSFIDDLE
Chrome有正确的顺序,应该是:
Funny Pig 1
Funny Pig 2
Funny Pig 3
Angry Lion 1
Angry Lion 2
Little Rabbit 1
Little Rabbit 2有什么想法吗?
发布于 2018-04-18 12:36:49
这类不一定是稳定。
当您只按名称部分进行排序时,直到第一个空格为止,排序算法为相同的名称选择一个位置,这不尊重数字值。
为了克服这个问题,您也可以根据数值进行排序。
上一次排序之前的任何排序都会更改。
您需要有多个空格的字符串--一个不同的方法,因为有两个空格(三个元素)。现在,它在开始时不使用数值,在字符串末尾使用数值。
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();<div id="divID"></div>
https://stackoverflow.com/questions/49899771
复制相似问题