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

Sar*_*air 3 javascript arrays sorting

我有一个这样的嵌套数组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;
    });
}
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 5

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);
Run Code Online (Sandbox Code Playgroud)