复杂数组的处理方法之多维数组扁平化

news2024/10/7 4:23:40

1.需求:

将数组[1,2,[3,4,[5,6]],7,[8,[9,10]]] 转换为 [1,2,3,4,5,6,7,8,9,10]

2.实现方式:

(1)map加递归

思路:先准备好一个空数组,map遍历原数组并使用Array.isArray()判断数组的每一项是否为数组,如果其中某项是一个数组,则通过递归函数继续遍历,不是数组就添加到准备好的空数组中

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Document</title>

</head>

<body>

  <script>

    const numList = [1, 2, [3, 4, [5, 6]], 7, [8, [9, 10]]];

    function expandArr (arr) {

      const newArr = []

      function mapArr (arr) {

        arr.map(item => Array.isArray(item) ? mapArr(item) : newArr.push(item))

        return newArr

      }

      return mapArr(arr)

    }

    const res = expandArr(numList)

    console.log(res, '最终结果');

  </script>

</body>

</html>

(2)reduce加递归(第一种方法的优化)

思路:reduce遍历原数组并使用Array.isArray()判断数组的每一项是否为数组,如果是数组通过递归继续遍历,不是数组就将当前项与结果合并,直到reduce方法返回最后一次累加的结果

 const numList = [1, 2, [3, 4, [5, 6]], 7, [8, [9, 10]]];

    function expandArr (arr) {

      return arr.reduce((newArr, item) => newArr.concat(Array.isArray(item) ? expandArr(item) : item), [])

    }

    const res = expandArr(numList)

    console.log(res, '最终结果');

数组各种方法的使用,可以参考我的另一篇文章:

标题:操作数组方法的参数、返回值分别是什么?地址:https://mp.csdn.net/mp_blog/creation/editor/128056253

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五、HAL_Timer的定时功能

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)STM32CubeMX: V6.8.1 (3)MCU: STM32F407ZGT6 2、定时器简介 (1)定时器可以通过输入的时钟源进行计数&#xff0c;从而达到定时的功能。 3、实验目的&原理图 3.1、实验目的 (1)通过定时器设置定时&#xff0c;实现LED灯以500…

13 - 信号可靠性剖析

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 信号的可靠性1.1 问题1.2 信号查看&#xff08;kill -l&#xff09;1.3 信号的分类1.3.1 不可靠信号&#xff08;传统信号&#xff09;…

模拟仿真 OSC振荡器

用五个反相器做一个环形振荡器 跑瞬态仿真 发现并未振荡 手动添加起振 成功振荡 将上面的图像send to calculate&#xff0c;调用频率函数freq 可以看到振荡频率为2.5GHZ左右 如果想要降低振荡频率&#xff0c;可以在每个反相器后加寄生电容或者增大反相器尺寸&#xff0c;这…

ProGuard详解 - Java代码混淆

(29条消息) ProGuard详解 - Java代码混淆_黎陌MLing的博客-CSDN博客

【算法题】动态规划基础阶段之 爬楼梯 和 杨辉三角

动态规划基础阶段之爬楼梯和杨辉三角 前言二、爬楼梯2.1、思路2.2、代码实现 三、杨辉三角3.1、思路3.2、代码实现 四、杨辉三角2&#xff08;进阶&#xff09;总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优…

脱机下载程序

一&#xff0c;脱机下载工具 Mini-Pro V2 版 二&#xff0c;配置stm32CubeIDE 生成hex文件 三&#xff0c;脱机下载步骤 1&#xff0c;连接设备&#xff0c;选择芯片 2&#xff0c; 添加固件。 3&#xff0c;选项字节。 4&#xff0c;生成镜像文件&#xff0c;这个文件包含了…

Mysql索引失效情况及避免方式【案例分析】

索引失效情况及避免方式 建表数据sql CREATE TABLE staffs( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(24)NOT NULL DEFAULT COMMENT姓名, age INT NOT NULL DEFAULT 0 COMMENT年龄, pos VARCHAR(20) NOT NULL DEFAULT COMMENT职位, add_time TIMESTAMP NOT NULL DEF…

json数据、日期数据的参数传递及响应

文章目录 1.json数据传参1.1 postman如何发送json数据1.2 发送json数据&#xff0c;控制器如何接收 2. 日期类型参数传递2.1 日期类型参数如何指定格式 3.响应数据3.1 ResponseBody注解的使用 1.json数据传参 首先在maven中添加json坐标 1.1 postman如何发送json数据 1.2 发…

00后测试用例写的实在是.......

实在是太强了&#xff0c;00后测试用例写的比我还好&#xff0c;简直是无地自容… 经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人…

以太网频谱

Speed频谱100BASE-TX1GBASE-T2.5GBASE-T5GBASE-T10GBASE-T

网络程序——定时器

网络程序还有一种需要处理的常用事件——定时事件。服务器程序通常管理着众多定时事件&#xff0c;因此如何有效地组织这些定时事件&#xff0c;使之能在预期的时间点被触发且不影响服务器的主要逻辑&#xff0c;对于服务器的性能有着至关重要的影响。为此&#xff0c;我们要将…

递归 到底应该怎么理解?怎么写递归的代码

今天和大家一起来讨论一下递归&#xff1a; 我们尽可能使按照解题的思路来讨论递归&#xff0c;对于这个在计算机内部具体是怎样实现的&#xff0c;我们不做深入讨论&#xff0c;这里仅仅是简单的讨论一下&#xff1a; 求1 ~ n序列的和&#xff1a;1 2 3 ... n&#xff1…

pwn学习day1——ELF文件结构

0x01 介绍 ELF&#xff08;Executable and Linkable Format&#xff09;是一种常见的可执行文件和共享库格式&#xff0c;其结构如下&#xff1a; ELF header&#xff1a;包含了 ELF 文件的基本属性信息。Program header table&#xff1a;描述了程序在内存中的加载情况&…

Gogs私服搭建

1. Gogs介绍 官网地址&#xff1a;https://gogs.io 文档地址&#xff1a;https://gogs.io/docs Gogs&#xff0c;全称为Go Git Service&#xff0c;是一个基于 Go 语言开发的Git服务。它提供了一个类似于GitHub的界面和功能&#xff0c;允许您在自己的服务器上搭建私有的Git仓库…

幂律智能联合智谱AI发布千亿参数级法律垂直大模型PowerLawGLM

前言 2023年是当之无愧的“大模型之年”&#xff0c;据瑞银集团的一份报告显示&#xff0c;ChatGPT推出仅仅两个月后&#xff0c;月活用户已经突破了1亿&#xff0c;成为史上用户增长速度最快的消费级应用程序。 在炙热的大模型赛道里&#xff0c;基于中文大模型的发布也是层…

二叉树OJ题:LeetCode--104.二叉树的最大深度

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第104道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…

SAP从入门到放弃系列之工艺路线-子工序-Part2

文章目录 概述使用场景子工序内容1、 维护工序控制码2、维护子工序的工资类型3、作业标准值4、用户定义字段5、通过维护子工序的作业类型数据后&#xff0c;点击汇总标准值&#xff0c;工序的作业类型值可以通过子工序进行累计6、可以设置子工序是否带入生产订单 注意事项&…

selenium通过xpath定位text换行的元素

DOM元素&#xff08;该元素是换行的&#xff0c;不能通过普通xpath定位&#xff09;&#xff1a; 可使用下面xpath定位该div //div[./text()/following-sibling::text()"点" and ./text()"5"] 解释一下就是&#xff1a;定位“子节点的text是[5] 且 子节点…

自然语言处理(概念)

1、 RNN模型简介 1.2传统RNN模型 2、LSTM模型 3、GRU模型 5、注意力机制 6、人名分类器 7 、BERT 8、Transformer 的结构是什么样子的&#xff1f; 各个子模块有什么作用&#xff1f; 8.1 Encoder模块 8.2 Decoder模块 8.3 Transformer 结构中的Decoder端具体输入是什么&#…