JavaScript中实现指定规则的二维数组简单排序方法?
二维数组按指定规则排序的解决方案
你的代码问题出在将数组元素转为字符串后排序——字符串排序是按字符的Unicode顺序而非数值大小,比如"19.10"会因为首字符'1'的编码小于'5',错误地排在"5.59"前面,导致结果不符合要求。
直接使用数组的sort()方法并传入自定义比较函数就能解决问题,代码如下:
let arr = [[0,23],[19,30],[6,47],[5,59],[1,56],[1,20],[19,10]]; let result = arr.sort((a, b) => { // 优先按子数组第一个元素升序 if (a[0] !== b[0]) { return a[0] - b[0]; } // 第一个元素相同时,按第二个元素升序 return a[1] - b[1]; }); console.log(result);
代码说明
sort()方法的比较函数中,返回值为负数时,a会排在b前面;返回正数时,b排在a前面;返回0则保持原有顺序。- 先对比子数组的第一个元素,通过数值差确定排序方向;当第一个元素相等时,再对比第二个元素的数值差,实现你需要的排序规则。
内容的提问来源于stack exchange,提问作者Jordy
相关产品推荐
相关产品推荐

