如何在JavaScript中对嵌套数组内部元素按数值升序排序
问题原因
- 你调用的
Array.sort()是作用于外层二维数组的方法,仅用来调整外层数组中子数组的排列顺序,不会修改子数组内部的元素顺序。 - 你编写的比较函数仅用于判断两个子数组的外层排序优先级,完全没有涉及子数组内部元素的排序逻辑,因此无法得到预期结果。
合理实现方案
你需要遍历外层数组,给每一个子数组单独执行升序排序操作,根据是否需要保留原数组可以选择两种实现:
方案1:直接修改原数组
如果不需要保留原始的子数组顺序,可直接遍历修改:
let triplets = [ [ 1, -1, 0 ], [ 1, -1, 0 ], [ 1, 0, -1 ] ] // 给每个子数组单独做数值升序排序 triplets.forEach(subArr => subArr.sort((a, b) => a - b)) console.log(triplets) // 输出 [ [-1, 0, 1], [-1, 0, 1], [-1, 0, 1] ]
方案2:生成新数组,不改动原数据
如果需要保留原始数组内容,可先拷贝子数组再排序:
let triplets = [ [ 1, -1, 0 ], [ 1, -1, 0 ], [ 1, 0, -1 ] ] const sortedArrays = triplets.map(subArr => { // 浅拷贝子数组后再排序,避免污染原数据 return [...subArr].sort((a, b) => a - b) }) console.log(sortedArrays) // 符合预期的结果 console.log(triplets) // 原数组保持不变
注意:
Array.sort()默认按照字符串Unicode编码排序,数值排序必须传入(a, b) => a - b比较函数,否则会出现非预期的排序结果。
内容的提问来源于stack exchange,提问作者Tyler Morales
相关产品推荐
相关产品推荐

