JavaScript合并两个有序数组后调用sort()排序结果异常如何解决
问题原因
JavaScript 内置的sort()方法默认采用字符串Unicode码点顺序排序,不会按数字的数值大小比较。数组中的数字会被先转为字符串再做对比,比如'100'的首字符'1'的Unicode编码小于'2'的编码,所以排序后100会出现在2前面,和预期的数字升序结果不符。
修复方案
给sort()传入数字比较回调函数即可实现数值排序,升序逻辑返回a - b,降序逻辑返回b - a:
arr1 = [2,6,8,56,78,99,100]; arr2 = [1,4,6,8,9,99]; arr3 = arr1.concat(arr2); // 传入数值比较函数实现升序排序 arr3.sort((a, b) => a - b); console.log(arr3); // 输出结果:[1,2,4,6,6,8,8,9,56,78,99,99,100]
内容的提问来源于stack exchange,提问作者Dumpling
相关产品推荐
相关产品推荐

