如何解决 JavasSript [7,-2,2,-7,-3].sort() = [-2,-3,-7,2,-7] 问题?
[7,-2,2,-7,-3].sort() = [-2,-3,-7,2,-7]
因为 JavaScript 预设的比较函式是
(a, b) => a.toString().localeCompare(b)
也就是先将输入转为字串 (所以上述就是 "-" 排在数字之前比较,第二个字元再来比顺序),并依据区域化设定而会不同的排序结果 —— 举例来说,如果你的语系设定为捷克语 (分类上算是西斯拉夫语支),以 "CH" 开头的字串要排在 "H" 之后,但单看字母的话,"C" 要在 "B" 之后。
光是排序的规则就可以探讨一阵子,我们该如何诚实面对自身对 JavaScript 的无力呢?
想请问大家怎么解决JS的排序问题呢?
有推荐的第三方库?
更新
尝试第一种方式 : JavaScript中sort方法排序不正确解决办法_weixin_36309908的博客-CSDN博客
var arr = [7,-2,2,-7,-3];arr.sort(function (a,b) {
if (a < b ) return -1;
if (a > b ) return 1;
return 0;
});
结果 : 可以,但需要每一次排序自己实现方法
尝试2 : 从 V8 源码看 JS 数组排序的诡异问题 - 前端进阶 - SegmentFault 思否
var arr = [7,-2,2,-7,-3];arr.sort((x, y) => x - y);
结果 : OK,而且也简短好多,但会有浏览器间的兼容问题(先map再sort
跟先sort再map
结果可能会不一样),贞操蛋 = v =
回答
你这方法一和方法二没什么区别呀
你所说兼容性问题应该是不存在的,目前list.sort((a, b) => a - b)
应该是被浏览器广泛支持的,并且符合你的需求
我的天写个比较大小的方法也叫麻烦。。。
嫌麻烦你可用underscore, loadsh,ramda等等等等
const n = _.sortBy([7,-2,2,-7,-3]);console.log(n);
R.sortWith([R.descend(Number)])([7,-2,2,-7,-3])
R.sortWith([R.ascend(Number)])([7,-2,2,-7,-3])
以上是 如何解决 JavasSript [7,-2,2,-7,-3].sort() = [-2,-3,-7,2,-7] 问题? 的全部内容, 来源链接: utcz.com/a/43284.html