数组扁平化(四种方法)

数组扁平化:

        指将多维数组 array(嵌套可以是任何层数,例如:[ 1,[2,3],[4,[5] ] ] )转换为一维数组(例如:[1,2,3,4,5] )。

[ 1,[2,3],[4,[5] ] ]  ------->  [1,2,3,4,5]

方法一:  递归   遍历

           具体步骤如下代码所示:

 <script>
        //递归的方法

        //封装函数
        function flatten(arr,newarr){
            //遍历arr数组
            for(var i=0;i<arr.length;i++){
                //判断arr[i]是否为数组  instanceof  判断是否为数组,返回值为true/false
                if(arr[i] instanceof Array){
                    //如果是数组,则递归,再次运行函数
                    flatten(arr[i],newarr);
                }else{
                    //若果不是数组,则将arr[i]推到新数组newarr中
                    newarr.push(arr[i]);
                }
            }
            //返回新数组
            return newarr;
        }
        //给出需要扁平化的数组arr
        var arr=[1,[2,3,[4]],[5,6]];
        //控制台打印
        console.log(flatten(arr,[]));

    </script>

或者:(推荐上边的递归方式解决)

function flat(arr1) {
            let result = [];
            for (let i = 0; i < arr1.length; i++) {
                if (Array.isArray(arr1[i])) {
                    // concat连接两个或更多的数组,不会改变现有的数组,而是返回一个新的数组,不修改原数组
                    result = result.concat(flat(arr1[i]));
                } else {
                    // push向数组的末尾添加一个或更多元素,并返回新的长度,修改原数组
                    result.push(arr1[i]);
                }
            }
            return result;
        }
        var arr1 = [1, [2], [3, 4], [5, [6, [7]]]];
        console.log(flat(arr1));

运行结果:

第二种方法: toString()+split()+map()+parseInt()

var arr2 = [1, [2, [3, [4],5,[6,[7]]]]];
        arr2=arr2.toString();
        arr2=arr2.split(',');
        arr2=arr2.map(function(item){
            return parseInt(item);
        })
        console.log(arr2);

运行结果如下:

第三种方法: 正则 replace和JSON方法

var arr3 = [1, [2, [3, [4, 5]]]];
        function flatten(arr3) {
            var str = JSON.stringify(arr3);
            // console.log(str);
            str = str.replace(/(\[|\])/g, '');
            // console.log(str);
            str = '[' + str + ']';
            // console.log(str);
            return JSON.parse(str);
        }
        console.log(flatten(arr3)); 

运行结果如下:

第四种方法:flat(infinity)     

 flat()创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。

Infinity  无穷大   

var arr4=[1, [2, 3, [4]]];
          var result1=arr4.flat(Infinity);
          console.log(result1);

运行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P1287 盒子与球

题干&#xff1a; 现有 r 个互不相同的盒子和 n 个互不相同的球&#xff0c;要将这 n 个球放入 r 个盒子中&#xff0c;且不允许有空盒子。请求出有多少种不同的放法。 两种放法不同当且仅当存在一个球使得该球在两种放法中放入了不同的盒子。 数据范围&#xff1a; 0<n,r&l…

nodejs微信小程序+python+PHP在线学习平台设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

C++编程法则365天一天一条(24)RTTI运行时类型信息typeid和type_info

文章目录 基本用法编译时或运行时判定 基本用法 typeid 是 C 的一个运算符&#xff0c;它用于获取表达式的类型信息。它返回一个 std::type_info 对象引用&#xff0c;该对象包含有关表达式的类型的信息。 要使用 typeid 运算符&#xff0c;需要包含 <typeinfo> 头文件…

Realme X7 Pro Root 刷机教程

Realme X7 Pro 刷机教程 Just For Fun&#xff0c;最近倒腾了下Realme X7 Pro 刷root。此博客为个人记录刷机过程&#xff0c;如有机友跟随本教程操作&#xff0c;请谨慎操作&#xff01;&#xff01;&#xff01; 以下教程真针对Realme X7 Pro&#xff0c;其他版本方法未知&…

Jmeter性能测试入门 -——性能插件介绍

一、前言 1、首先&#xff0c;JMeter提供了三个基本的线程组&#xff0c;分别为: Thread Group setUp Thread Group tearDown Thread Group 2、其他线程组可以通过集成插件的方式使用&#xff0c;包括&#xff1a; bzm - Arrivals Thread Group bzm - Concurrency Thread Group…

【Linux】如何对文本文件进行有条件地划分?——cut命令

cut 命令可以根据一个指定的标记&#xff08;默认是 tab&#xff09;来为文本划分列&#xff0c;然后将此列显示。 例如想要显示 passwd 文件的第一列可以使用以下命令&#xff1a;cut –f 1 –d : /etc/passwd cut&#xff1a;用于从文件的每一行中提取部分内容的命令。-f 1&…

【postgresql】ERROR: INSERT has more expressions than target columns

执行下面sql insert into apply_account_cancellation3 select * from pply_account_cancellation; 返回下面错误信息 insert into apply_account_cancellation3 select * from apply_account_cancellation > ERROR: INSERT has more expressions than target colu…

优麒麟ubuntukylin安装UE4.27.2

优麒麟ubuntukylin安装UE4.27.2 在&#xff08;国产&#xff09;优麒麟 ubuntukylin Linux平台上编译测试安装虚幻引擎。 优麒麟系统 这里选择的是官方增强版 https://www.ubuntukylin.com/downloads/ 同样的可以选择对应的Ubuntu22.04 LTS&#xff0c;唯一的区别就是优麒麟…

RK3568平台开发系列讲解(Linux系统篇)中断属性解析

🚀返回专栏总目录 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过设备树中的解析。 一、interrupts interrupts 属性用于指定设备的中断相关信息。它描述了中断控制器的类型、中断号以及中断触发类型。下面将对 interrupts 属性的各个方面进行介绍。…

【深度学习】强化学习(三)强化学习的目标函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数1. 总回报&#xff08;Return&#xff09;2. 折扣回报&#xff08;Discounted Return&#xff09;a. 折扣率b. 折扣回报的定义 3.…

BUUCTF crypto做题记录(3)新手向

目录 一、Rabbit 二、篱笆墙的影子 三、丢失的MD5 四、Alice与Bob 一、Rabbit 得到的密文&#xff1a;U2FsdGVkX1/ydnDPowGbjjJXhZxm2MP2AgI 依旧是看不懂是什么编码&#xff0c;上网搜索&#xff0c;在侧栏发现Rabbit解码&#xff0c;直接搜索就能有在线解码网站 二、篱笆…

Vulnhub-DC-2 靶机复现完整过程

环境准备&#xff1a; kali: NAT模式 网段 &#xff1a;192.168.200.0 DC-2: NAT模式 网段 &#xff1a;192.168.200.0 保证靶机和攻击机在一个网段上 信息收集 收集同网段存货主机IP地址 nmap -sP ip地址 arp-scan -l显示错误页面&#xff0c;显然是重定向错误&#xff0c…

电工--集成运算放大器

目录 集成运算放大器的简单介绍 运算放大器在信号运算方面的应用 比例运算 反相输入 同相输入 加法运算 减法运算 积分运算 微分运算 集成运算放大器的简单介绍 线性区 虚断&#xff1a; 虚短&#xff1a; 运算放大器在信号运算方面的应用 比例运算 反相…

进网TLC认证CE传导骚扰测试分析整改事例

1.1 设备是一款基于CAT1通信的电子产品&#xff0c;在做CE传导骚扰时低频超标异常 1.1.1 从上面测试数据图看&#xff0c;低于3MHz明显已超标。 1.2 什么是CE传导骚扰 电子设备一般主要测试150K~30MHz这个频段的骚扰大小。它是对设备电源线、信号线等产生的一些杂波对外辐射出…

《三十》模块化打包构建工具 Rollup

19的2小时06分钟 Rollup 是一个 JavaScript 的模块化打包工具&#xff0c;可以帮助编译微小的代码到庞大的复杂的代码中&#xff08;例如一个库或者一个应用程序&#xff09;。 Rollup 和 Webpack 的区别&#xff1a; Rollup 也是一个模块化的打包工具&#xff0c;但是它主要…

联合体和枚举

联合体&#xff1a; 联合体是什么&#xff1f; 联合体也是一种自定义类型&#xff0c;这种类型定义的变量也包含一系列类型&#xff0c;特征是这些类型公用一块内存空间(所以叫联合体也叫公用体)可以理解为结构体公用一块内存。 //联合-联合体-共用体 //联合也是一种特殊的自…

Other -- ChatGPT 原理

本文为个人理解&#xff0c;帮助小白&#xff08;本人就是&#xff09;了解正在创建新时代的 AI 产品&#xff0c;如文中理解有误欢迎留言。 [参考链接--](https://baijiahao.baidu.com/s?id1765556782543603120&wfrspider&forpc) 1. 了解一些基本概念 大语言模型&a…

MySQL进阶学习--day02

存储引擎介绍 1. InnoDB1.1 介绍1.2 特点1.3 文件1.4 逻辑存储结构 2. MyISAM2.1 介绍2.2 特点2.3 文件 3. Memory3.1 介绍3.2 特点3.3 文件 4. 区别及特点5. 存储引擎选择6. InnoDB引擎与MyISAM引擎的区别 ? 上篇文章我们介绍了什么是存储引擎&#xff0c;以及如何在建表时如…

来自OpenAI的官方解释:ChatGPT中的GPTs与Assistants API的区别是什么?有什么差异?

本文原文来自DataLearnerAI的官方网站&#xff1a; 来自OpenAI的官方解释&#xff1a;ChatGPT中的GPTs与Assistants API的区别是什么&#xff1f;有什么差异&#xff1f; | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701996595465 OpenAI发布的产…

玩转大数据11:数据可视化与交互式分析

1. 引言 数据可视化和交互式分析是大数据领域中的重要方面。随着大数据时代的到来&#xff0c;数据量越来越大&#xff0c;数据类型越来越复杂&#xff0c;传统的数据处理和分析方法已经无法满足我们的需求。数据可视化可以将复杂的数据以简单、直观的方式呈现出来&#xff0c…
最新文章