Chrome和Safari javascript .sort()方法的工作方式不同

时间:2018-04-18 12:30:07

标签: javascript sorting browser safari

我面对的是一件非常奇怪的事(至少对我来说很奇怪)。 我正在尝试对数组中的项目进行排序,但在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

有什么想法?

1 个答案:

答案 0 :(得分:1)

Array#sort

  

排序不一定是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;
&#13;
&#13;

相关问题