在this question中,数据按大多数排序,如果大多数是相等的,则按两位工人在同一天工作时选择更多水果的人排序。如下图所示
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中(必须更改为警报才能查看数据)和IOS的chrome只能在第二次排序中得到应用
111 April
222 Bruno
333 Carlos
444 Dwayne
555 Ed
请参阅fiddle。
这是为什么? 这些浏览器不支持什么? 我阅读了关于forEach的文档,这些文档在这些浏览器中没有提到任何支持问题,但是我认为它不是foreach的问题,因为排序事先发生了吗?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
答案 0 :(得分:1)
当您尝试在a
中查找信息时,您依赖于参数b
和sort
的顺序来提供给workers
的回调:
b["sd-" + a.id + b.id] - a["sd-" + a.id + b.id]
此排序不可预测,并且在浏览器中似乎不一致。在Firefox上,我得到以下查询:
sd-111222
sd-444555
在Safari上,我得到了这些(不存在相反的顺序):
sd-222111
sd-555444
你不应该依赖这种顺序。您要知道的是,您正在将名为a
的数组中的某些元素与名为b
的数组中的某些其他元素进行比较。你无法确定其他任何事情。