Javascript 按不在IE和Safari中工作的多个列进行js排序

Javascript 按不在IE和Safari中工作的多个列进行js排序,javascript,jquery,html,ios,arrays,Javascript,Jquery,Html,Ios,Arrays,数据按most排序,如果most相等,则按两个工人在同一天工作时采摘更多水果的人排序。如下图所示 var workers = [ {"id":"111","name":"April", "most":"7","sd-111222":"1","sd-111333":"2","sd-111444":"2","sd-111555":"2"}, {"id":"222","name":"Bruno", "most":"7","sd-111222":"2","sd-2

数据按most排序,如果most相等,则按两个工人在同一天工作时采摘更多水果的人排序。如下图所示

    var workers = [
        {"id":"111","name":"April", "most":"7","sd-111222":"1","sd-111333":"2","sd-111444":"2","sd-111555":"2"},
        {"id":"222","name":"Bruno", "most":"7","sd-111222":"2","sd-222333":"1","sd-222444":"2","sd-222555":"2"},
        {"id":"333","name":"Carlos","most":"6","sd-111333":"1","sd-222333":"2","sd-333444":"2","sd-333555":"1"},
        {"id":"444","name":"Dwayne","most":"5","sd-111444":"1","sd-222444":"1","sd-333444":"1","sd-444555":"2"},
        {"id":"555","name":"Ed",    "most":"5","sd-111555":"1","sd-222555":"1","sd-333555":"2","sd-444555":"1"}
    ];

        workers.sort(function(a,b) {
            return (a.most == b.most)
                    ? (b["sd-" + a.id + b.id] - a["sd-" + a.id + b.id])
                    : (b.most - a.most);               
        });
    workers.forEach(function(elm){
        console.log(elm["id"] + " " +elm["name"]);
    });
在FF/Chrome/Android/Chrome for Android中,此输出

    222 Bruno
    111 April
    333 Carlos
    444 Dwayne
    555 Ed
在Safari和IE11(必须更改为警报才能查看数据)以及chrome for IOS中,我只得到了第二个排序,因为没有应用第二个排序

    111 April
    222 Bruno
    333 Carlos
    444 Dwayne
    555 Ed

为什么会这样? 这些浏览器不支持什么? 我阅读了有关forEach的文档,其中没有提到这些浏览器中的任何支持问题,但我认为这不是forEach的问题,因为排序是在之前进行的


当您尝试在
workers
中查找信息时,您依赖于参数
a
b
的顺序来调用提供给
sort
的回调:

b["sd-" + a.id + b.id] - a["sd-" + a.id + b.id] 
这种排序是不可预测的,并且在不同浏览器之间似乎不一致。在Firefox上,我得到以下查找:

sd-111222 
sd-444555
在Safari上,我得到了这些(与之相反的顺序不存在):


你不应该依赖这个命令。您所知道的是,您正在将名为
a
的数组中的某个元素与名为
b
的数组中的另一个元素进行比较。您无法确定其他任何事情。

谢谢您提供的宝贵信息。你对这个解决方案有什么想法?它似乎给了我我需要的东西?
sd-222111
sd-555444