[英]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.