jssorting多列不工作在IE和Safari
在这个问题中 ,数据是按大多数sorting的,如果大多数数据是相同的,那么当两名员工在同一天工作时,谁select了更多的水果。 如下所示
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中为Android输出。
222 Bruno 111 April 333 Carlos 444 Dwayne 555 Ed
在Safari和IE11(不得不改变警报来查看数据)和铬为IOS我只得到作为次要种类没有得到应用
111 April 222 Bruno 333 Carlos 444 Dwayne 555 Ed
看小提琴 。
为什么是这样? 这些浏览器不支持什么? 我阅读了有关forEach的文档,其中没有提到这些浏览器中的任何支持问题,但是我认为这不是foreach中的问题,因为这种情况是事先发生的。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
当您尝试在workers
查找信息时,您将依靠参数a
和b
的顺序来提供sort
的callback:
b["sd-" + a.id + b.id] - a["sd-" + a.id + b.id]
这种sorting是不可预测的,并且在浏览器中看起来并不一致。 在Firefox上,我得到以下查找:
sd-111222 sd-444555
在Safari上,我得到这些(这是相反的顺序不存在):
sd-222111 sd-555444
你不应该依赖这个顺序。 所有你知道的是,你正在比较a
名为a
的数组中a
某个元素到名为b
的数组中的其他元素。 你不能确定什么。