繁体   English   中英

如何按升序对 JavaScript 中的嵌套数组进行排序?

[英]How to sort a nested array in JavaScript in ascending order?

我有一个像这样的嵌套数组var input = [2, 4, 2, 6, 1, [4, 2, 1], [0, 2, 1, 6, [2, 1], [1]], [1], 5]; 并且输出应该以这样的方式排序,所有数字应该按其升序排在第一位,如果数组包含子数组,它应该按其长度顺序排在第一位。 即,长度为 1 的子数组应排在第一位,长度为 2 的子数组应排在第二位,依此类推。另外,如果其中有数字,则应按升序排序。

var output = [1, 2, 2, 4, 5, 6, [1], [1, 2, 4], [0, 1, 2, 6, [1], [1, 2]]];

下面是我的实现,但它只排序了一层。 如何递归调用呢?

function sortArray(arr) {
  return [...arr]
    .sort((a, b) => {
      if (Array.isArray(a) && Array.isArray(b)) return a.length - b.length;
      else if (Array.isArray(a) || Array.isArray(b)) return 1;
      else return a - b;
    });
}

在排序之前在数组上使用Array.map() ,如果该项目是数组调用sortArr

 function sortArray(arr) { return arr.map(a => Array.isArray(a)? sortArray(a): a).sort((a, b) => { if (Array.isArray(a) && Array.isArray(b)) return a.length - b.length; else if (Array.isArray(a)) return 1; else if (Array.isArray(b)) return -1; else return a - b; }); } const input = [2, 4, 2, 6, 1, [4, 2, 1], [0, 2, 1, 6, [2, 1], [1]], [1], 5]; const result = sortArray(input); console.log(result);

您可以通过使用forEach循环创建递归函数并使用sort方法来做到这一点。

 var input = [2, 4, 2, 6, 1, [4, 2, 1], [0, 2, 1, 6, [2, 1], [1]], [1], 5]; function deepSort(data) { data.sort((a, b) =>.Array.isArray(b) -.Array.isArray(a) || a - b || a.length - b.length) data;forEach(e => Array.isArray(e) && deepSort(e)) } deepSort(input). console;log(JSON.stringify(input));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM