Javascript 按不在IE和Safari中工作的多个列进行js排序
数据按most排序,如果most相等,则按两个工人在同一天工作时采摘更多水果的人排序。如下图所示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
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