首页 > 其他分享 >JS计算数组层级(深度)

JS计算数组层级(深度)

时间:2023-09-17 16:24:46浏览次数:39  
标签:arr 层级 const JS depth 数组 calculateDepth

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

递归方法:

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入栈,然后迭代处理栈中的元素,不断地将子数组和它们的层级入栈,同时更新最大深度。最终,返回最大深度。

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

标签:arr,层级,const,JS,depth,数组,calculateDepth
From: https://www.cnblogs.com/echohye/p/17709010.html

相关文章

  • 添加Element ui依赖报错:npm ERR code EPERM,syscall mkdir, npm ERR! path D:\Vue\
    添加Elementui依赖报错:npmERRcodeEPERM,syscallmkdir,npmERR!pathD:\Vue\nodejs\node_cache\_cacache\index-v5\f3\de具体报错信息如下:我这个是在IDEA控制台输入npmielement-ui-S添加elementui依赖时出现的报错解决办法:修改nodejs(安装node的安装地址那里)......
  • 【LeetCode】删除数对后的最小数组长度
    题目给你一个下标从0开始的非递减整数数组nums。你可以执行以下操作任意次:选择两个下标i和j,满足i<j且nums[i]<nums[j]。将nums中下标在i和j处的元素删除。剩余元素按照原来的顺序组成新的数组,下标也重新从0开始编号。请你返回一个整数,表示执行......
  • 好用的C语言JSON解析器
    本文介绍开源C语言库Melon的JSON解析器。相信很多读者都听说过甚至使用过cJSON开源库。那么本文就拿cJSON与Melon的JSON组件进行对比。下面我们就来一起看一看。编码Encode假设我们要构建如下JSON:{"name":"Awesome4K","resolutions":[{"w......
  • JS判断对象是否为空对象的几种方法
    通过JSON自带的stringify()方法来判断functionisEmptyObj(obj){returnJSON.stringify(obj)==='{}'}console.log('对象是否为空:',isEmptyObj({}))forin循环判断functionisEmptyObj(obj){for(letiteminobj){returntrue}returnf......
  • 数组(三)
    数组排序算法今日份学习为数组的排序算法。数组的排序算法分为三种:冒泡排序,直接选择排序以及反转排序。冒泡排序冒泡排序法在先前的C语言学习中已经有过接触。它的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组面前,把较大的元素移动到数组后面。【......
  • C语言之[数组]篇
    前言牛牛又和大家见面了,本篇牛牛要讲的内容是c语言中有关数组的内容。欢迎大家一起学习,共同进步。@TOC数组通过前面所学到的知识,我们了解到,当我们需要使用一些变量的时候,我们可以通过创建变量来使用它,但是,有的时候我们需要使用很多个同类型的变量,那样一个个创建是否显得太过繁琐?......
  • FastAPI学习-15.JSON 编码器 jsonable_encoder
    前言在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的数据类型(如dict、list等)。比如,如果您需要将其存储在数据库中。对于这种要求, FastAPI提供了jsonable_encoder()函数。使用jsonable_encoderjsonable_encoder在实际应用场景中,可能需要将数据类型(如:Py......
  • 代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后
    55. 跳跃游戏1.跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。时间复杂度:O(n)空间复杂度:O(1)1classSolution:2defca......
  • js获取select选中的标签option的值
    js中获取方法varobj=document.getElementById(”testSelect”);//定位idvarindex=obj.selectedIndex;//选中索引vartext=obj.options[index].text;//选中文本varvalue=obj.options[index].value;//选中值jQuery中获得选中select值第一种方式(......
  • JS 日期比较大小的简单实例
    一 varbeginDate='2015-06-17';varendDate='2015-06-15';vard1=newDate(beginDate.replace(/\-/g,"\/"));vard2=newDate(endDate.replace(/\-/g,"\/"));if(beginDate!=""&&endDate!=""......