我怎么判断一个数组是不是双层呢,判断后返回true和false,比如[1,1,1,1]就是false,[1,[2,2,2],1,1,1]就是true,有啥方法么,如果是三层,怎么判断呢
我怎么判断一个数组是不是双层呢,判断后返回true和false,比如[1,1,1,1]就是false,[1,[2,2,2],1,1,1]就是true,有啥方法么,如果是三层,怎么判断呢
const getLevel = list => Array.isArray(list) ? Math.max(...list.map(getLevel)) + 1 : 0
可读性高一点的就是
const getLevel = list => {
return Array.isArray(list)
// 当前层级等于子元素层级最大值+1
? Math.max(...list.map(getLevel)) + 1
: 0
}
我的一个思路,result
为层数;想判断几层就几层
const data = [1, [2, 2, [3, [4], [5]]], 1, 1, [6], 1];
let result = 1;
const func = arrs => {
let a = false;
const arr = arrs.filter(r => Array.isArray(r));
if (arr.length) {
a = true;
arr.forEach(func);
}
if (a) result += 1;
};
func(data);
console.log(result);
获取最大层级数
function getMaxLevel(arr){
return arr.reduce((maxlevel, item) => {
return Array.isArray(item) ? Math.max(maxlevel, getMaxLevel(item) + 1) : maxlevel
}, 1)
}
getMaxLevel([1,[2,2,2],1,1,1]) // 2
getMaxLevel([1,[2,2,2],[[1]],1,1]) // 3
可以写个函数获取嵌套层数
function getArrLevel(arr,level=0){
let num=[];
arr.forEach((x)=>{
if(Array.isArray(x)){
num.push(getArrLevel(x,level+1));
}
else
{
num.push(0);
}
});
return level>Math.max(...num)?level:Math.max(...num);
}
getArrLevel([1,2,3]) //无嵌套
getArrLevel([1,2,[3]]) //嵌套一级
getArrLevel([1,[2], [1,2,[1,2]] ]) //既有一级嵌套也有二级嵌套,取极大值
function maxDepth(arr) {
var depth = 0;
for (var i = 0; i < arr.length; ++i) {
if (arr[i] instanceof Array) {
var currentDepth = 1 + maxDepth(arr[i]);
if (depth < currentDepth) depth = currentDepth;
}
}
return depth;
}
console.dir(!!maxDepth([1, 1, 1, 1])); // false
console.dir(!!maxDepth([1, [2, 2, 2], 1, 1, 1])); // true
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
6 回答1.2k 阅读
isDeepThen()
用来判断最大深度是否超出指定 level;getMaxDeep()
用来获取最大深度。都是递归实现。两个函数没有直接关系,只是用来干不同的事情。