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)
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)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |