错误的排序回调-结果仍然正确
Wrong sort callback - results still correct
众所周知,sort()回调函数应该返回-1、0或1,这取决于其参数的比较方式。尽管如此,我经常看到排序回调以以下方式编写:
someArray.sort(function(a, b) { return a > b })
尽管这显然不符合规范,但由于回调只返回0或1,它似乎仍然产生了正确的结果:
a = []
for(i = 0; i < 1000; i++)
a.push(Math.floor(Math.random() * 1000))
console.log(a.sort(function(a, b) { return a > b }))
有人能举一个例子说明上面的回调函数会导致数组排序错误吗?数组元素不必是数字。
这一切都取决于特定浏览器的排序实现,是否使用小于比较,以及是否将排序函数的返回值自动转换为int。
这在IE9中失败,但在Chrome中有效:
"cadbe".split('').sort(function(a,b) { return a > b });
这适用于IE9和Chrome:
"cadbe".split('').sort();
相关文章:
- Javascript表排序工作得很好,但对所有索引进行迭代会得到不同的结果
- 如何对javascript表进行排序(升序或降序),该表是某些SQL操作表的结果
- 如何在AngularJS中根据子结果集排序结果
- 重新排序angularjs ngRepeat与后续数据结果
- 对indexedDB查询的结果进行排序
- 如何对select2自动完成结果进行排序,只显示以第一个字母开头的项目
- 使用 Greasemonkey 修改 Craigslist 的默认搜索结果排序
- 根据所选排序动态更改结果
- 按活动排序,但不在结果中显示活动
- 按距离对搜索结果进行排序
- 使用 AJAX 回调更新挖空可观察数组会生成随机排序的结果
- JS AJAX 提前键入结果排序/竞争条件
- Javascript JSON 结果排序
- 将对象属性设置为排序结果而不进行排序
- 检索两个列表,对值进行排序和比较,然后显示所有结果
- 随后的多维数组排序会产生意外的结果
- javascript排序和排序等于结果.怎样
- 按HTML表列对查询结果排序
- 按数组大小对结果排序
- 通过JavaScript奇数结果排序JSON对象