【JavaScript 教程】第六章 数组16—flat() :递归地将数组展平到指定的深度

2024-01-16 05:48

本文主要是介绍【JavaScript 教程】第六章 数组16—flat() :递归地将数组展平到指定的深度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

73e43f1075b3f60ff1ca74baeece1b02.png

英文 | https://www.javascripttutorial.net/

译文 | 杨小爱

在上节,我们学习如何使用 JavaScript Array join()方法将数组的所有元素连接成由分隔符分隔的字符串,错过的小伙伴可以点击文章《【JavaScript 教程】第六章 数组15—join() :将所有元素连接成一个字符串》进行学习。

那么,在今天的教程中,我们将一起来学习如何使用 JavaScript Array flat() 方法来展平数组。

JavaScript Array flat() 方法介绍

ES2019 引入了 Array.prototype.flat() 方法,该方法创建一个新数组,其中子数组的所有元素递归连接到指定深度。

下面显示了 flat() 方法的语法:

 
let newArray = arrayObject.flat([depth])

depth 参数指定该方法使数组结构平坦的深度,它默认为 1。

下面的例子展示了如何扁平化一个数字数组:

 
const numbers = [1, 2, [3, 4, 5]];
const flatNumbers = numbers.flat();
console.log(flatNumbers);

输出:

 
[1, 2, 3, 4, 5]

在这个例子中,我们没有将深度参数传递给 flat() 方法,因此深度默认为 1。flat() 方法将嵌套数组 [3,4,5] 的所有元素连接到新数组的元素。

请注意, flat() 方法会创建一个新数组并且不会更改原始数组:

 
console.log(numbers);

输出:

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

以下示例将具有两级深度的数组展平:

 
const numbers = [1, 2, [3, 4, 5, [6, 7]]];
const flatNumbers = numbers.flat(2);
console.log(flatNumbers);

输出:

 
[1, 2, 3, 4, 5, 6, 7]

当我们不知道深度级别时,可以将 Infinity 传递给 flat() 方法,以递归方式将子数组的所有元素连接到新数组中:

 
const numbers = [1, 2, [3, 4, 5, [6, 7, [8, 9]]]];
const flatNumbers = numbers.flat(Infinity);
console.log(flatNumbers);

如果一个数组有空槽,我们可以使用 flat() 方法去除空洞,像这样:

 
const numbers = [1, 2, , 4, , 5];
const sequence = numbers.flat();
console.log(sequence);

输出:

 
[ 1, 2, 4, 5 ]

总结

使用 Array.prototype.flat() 方法将包含嵌套数组的数组展平。

使用 depth 参数指定嵌套数组应该展平的深度,深度默认为 1。

flat() 还删除了数组中带有空槽的孔。

今天的内容就到这里了。

如果您还想学习更多关于数组的内容,请点击下文链接进行学习。

【JavaScript 教程】第六章 数组14—reduce() :将数组的元素减少为一个值

【JavaScript 教程】第六章 数组13— forEach() :遍历数组元素

【JavaScript 教程】第六章 数组12— map() :转换数组元素

【JavaScript 教程】第六章 数组11— filter() :过滤数组中的元素

【JavaScript 教程】第六章 数组10— sort() :对数组中的元素进行排序

【JavaScript 教程】第六章 数组09— some() :检查数组中是否至少有一个元素通过了测试

【JavaScript 教程】第六章 数组08— every() :检查数组中的每个元素是否都通过了测试

【JavaScript 教程】第六章 数组07— index() :在数组中定位一个元素

【JavaScript 教程】第六章 数组06— slice() :复制数组元素

【JavaScript 教程】第六章 数组05— splice():删除、插入和替换

【JavaScript 教程】第六章 数组04— JavaScript 队列

【JavaScript 教程】第六章 数组03— Stack :使用 Array 的push()和pop()方法实现堆栈数据结构

【JavaScript 教程】第六章 数组02— Array Length:如何有效地使用数组的长度属性

【JavaScript 教程】第六章 数组01— 介绍JavaScript中的Array类型

学习更多技能

请点击下方公众号

91c203e851c9dc1742fcf16186ba48c0.gif

24e9ccc7decd0e23fb2a9ea93bdd1fd5.png

36f5793822a42d0d60cb8bd566b0f83f.png

这篇关于【JavaScript 教程】第六章 数组16—flat() :递归地将数组展平到指定的深度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611507

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que