JS计算数组层级(深度)

发布时间 2023-09-17 16:18:19作者: 槑孒

如果有一个多层嵌套的数组,想要计算其层级(深度),可以使用递归或迭代方法来实现。以下是两种常用的方法示例:

递归方法:

function calculateDepth(arr) {
  if (!Array.isArray(arr)) {
    return 0; // 如果不是数组,返回0表示不是层级结构
  }
  
  let maxDepth = 0;
  
  for (const item of arr) {
    const depth = calculateDepth(item);
    maxDepth = Math.max(maxDepth, depth);
  }
  
  return maxDepth + 1; // 加1表示当前层级
}

const nestedArray = [1, [2, [3, 4], 5], 6];
const depth = calculateDepth(nestedArray);
console.log(`数组的层级是 ${depth}`);

这个递归函数 calculateDepth 接受一个数组作为参数,并递归地计算其深度。对于每个元素,它调用自身,并比较每个子数组的深度,然后返回最大深度加1,以表示当前层级。

迭代方法:

function calculateDepth(arr) {
  if (!Array.isArray(arr)) {
    return 0;
  }
  
  let depth = 0;
  let stack = arr.map(item => [item, 1]); // 使用栈来迭代
  
  while (stack.length > 0) {
    const [current, currentDepth] = stack.pop();
    depth = Math.max(depth, currentDepth);
    
    if (Array.isArray(current)) {
      for (const item of current) {
        stack.push([item, currentDepth + 1]);
      }
    }
  }
  
  return depth;
}

const nestedArray = [1, [2, [3, 4], 5], 6];
const depth = calculateDepth(nestedArray);
console.log(`数组的层级是 ${depth}`);

这个迭代方法使用了一个栈来处理嵌套数组。它首先将根元素和层级1入栈,然后迭代处理栈中的元素,不断地将子数组和它们的层级入栈,同时更新最大深度。最终,返回最大深度。

无论使用递归还是迭代,这两种方法都可以计算多层嵌套数组的层级深度。可以根据自己的偏好选择其中一种方法来使用。