首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrome和Safari javascript .sort()方法的工作方式不同

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

Stack Overflow用户
提问于 2018-04-18 12:30:06
回答 1查看 1.1K关注 0票数 0

我面临着非常奇怪的事情(至少对我来说很奇怪)。我试图在数组中对项目进行排序,但在Chrome和Safari中却得到了不同的结果。

请看一看我的CHROME和Safari的JSFIDDLE

Chrome有正确的顺序,应该是:

代码语言:javascript
复制
Funny Pig 1 

Funny Pig 2 

Funny Pig 3 

Angry Lion 1

Angry Lion 2

Little  Rabbit 1

Little Rabbit 2

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-18 12:36:49

Array#sort

这类不一定是稳定。

当您只按名称部分进行排序时,直到第一个空格为止,排序算法为相同的名称选择一个位置,这不尊重数字值。

为了克服这个问题,您也可以根据数值进行排序。

上一次排序之前的任何排序都会更改。

您需要有多个空格的字符串--一个不同的方法,因为有两个空格(三个元素)。现在,它在开始时不使用数值,在字符串末尾使用数值。

​

代码语言:javascript
复制
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();
代码语言:javascript
复制
<div id="divID"></div>

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49899771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档