前端JavaScript篇之实现一个将多维数组展示的方法有哪些,分别是?

news2024/11/14 14:46:36

目录

  • 实现一个将多维数组展示的方法有哪些,分别是?
    • 方法一:递归展开成一维数组
    • 方法二:嵌套展示结构
    • 方法三:ES6新增的数组扩展方法 `flat()`
    • 方法四:`apply()` 结合 `concat()` 使用以展开成一维数组
    • 方法五:使用 `reduce()` 结合 `concat()` 方法展开多维数组
    • 方法六:使用递归的方法进行展开
    • 方法七:使用 `toString()` 和 `split(',')` 方法展开多维数组
    • 方法八:使用 `reduce()` 和 `concat()` 方法结合递归展开多维数组
    • 方法九:利用重写原型的另一种方法
    • 方法十:ES6 扩展运算符


实现一个将多维数组展示的方法有哪些,分别是?

方法一:递归展开成一维数组

思路:

  • 创建一个递归函数,负责将多维数组展开成一维数组。
  • 遍历数组元素,对于每个元素,如果是数组则递归展开,否则添加到结果数组中。

详细说明:

function flattenArray(arr) {
  return arr.reduce((result, item) => {
    return result.concat(Array.isArray(item) ? flattenArray(item) : item)
  }, [])
}

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 展开多维数组并输出结果
console.log(flattenArray(multiDimensionalArray))

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

请添加图片描述

方法二:嵌套展示结构

思路:

  • 创建一个递归函数,递归地展示多维数组的层次结构。
  • 使用缩进或其他方式表示数组的层次。

详细说明:

function displayMultiDimensionalArray(arr, depth = 0) {
  let result = ''

  for (let item of arr) {
    result += '  '.repeat(depth)

    if (Array.isArray(item)) {
      result += '[' + displayMultiDimensionalArray(item, depth + 1) + ']'
    } else {
      result += item
    }

    result += '\n'
  }

  return result
}

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 展示多维数组的层次结构并输出结果
console.log(displayMultiDimensionalArray(multiDimensionalArray))

参考效果:

1
  [2
    [3
      4]
  ]
  [5
    6]
  [7
    [8
      9
      [10
        11]
    ]
  ]

请添加图片描述

方法三:ES6新增的数组扩展方法 flat()

思路:

  • 使用 flat() 方法直接将多维数组展开成一维数组。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用 flat() 方法展开多维数组并输出结果
console.log(multiDimensionalArray.flat())

参考效果:

[1, 2, [3, 4], 5, 6, 7, [8, 9, [10, 11]]]

请添加图片描述

方法四:apply() 结合 concat() 使用以展开成一维数组

思路:

  • 使用 apply() 方法调用 concat(),结合传递数组作为参数,实现展开。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用 apply() 结合 concat() 方法展开多维数组并输出结果
console.log([].concat.apply([], multiDimensionalArray))

参考效果:

[1, 2, [3, 4], 5, 6, 7, [8, 9, [10, 11]]]

请添加图片描述

方法五:使用 reduce() 结合 concat() 方法展开多维数组

思路:

  • 使用 reduce() 方法遍历数组,将每个子数组通过 concat() 方法连接起来。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用 reduce() 结合 concat() 方法展开多维数组并输出结果
const flattenedArray = multiDimensionalArray.reduce((result, current) => result.concat(current), [])
console.log(flattenedArray)

参考效果:

[1, 2, [3, 4], 5, 6, 7, [8, 9, [10, 11]]]

请添加图片描述

方法六:使用递归的方法进行展开

思路:

  • 创建一个递归函数,负责将多维数组展开成一维数组。
  • 遍历数组元素,对于每个元素,如果是数组则递归展开,否则添加到结果数组中。

详细说明:

function flattenArray(arr) {
  return arr.reduce((result, item) => {
    return result.concat(Array.isArray(item) ? flattenArray(item) : item)
  }, [])
}

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用递归方法展开多维数组并输出结果
console.log(flattenArray(multiDimensionalArray))

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

请添加图片描述

方法七:使用 toString()split(',') 方法展开多维数组

思路:

  • 使用 toString() 将数组转换成逗号分隔的字符串。
  • 使用 split(',') 将字符串按逗号分割成数组。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]];

// 使用 toString() 和 split(',') 方法展开多维数组并输出结果
const flattenedArray = multiDimensionalArray.toString().split(',').map(item => +item || item);
console.log(flattenedArray);

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

请添加图片描述

方法八:使用 reduce()concat() 方法结合递归展开多维数组

思路:

  • 使用 reduce() 方法遍历数组,对每个元素进行判断,如果是数组则递归展开,否则直接添加到结果数组中。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用 reduce() 和 concat() 方法结合递归展开多维数组并输出结果
const flattenArray = arr => arr.reduce((result, item) => result.concat(Array.isArray(item) ? flattenArray(item) : item), [])
console.log(flattenArray(multiDimensionalArray))

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

请添加图片描述

方法九:利用重写原型的另一种方法

思路:

  • 通过重写数组原型,在原型上添加 flatten() 方法。
  • flatten() 方法中,使用 reduce() 方法遍历数组,递归地将多维数组展开。

详细说明:

// 重写数组原型添加 flatten 方法
Array.prototype.flatten = function () {
  return this.reduce((result, item) => result.concat(Array.isArray(item) ? item.flatten() : item), [])
}

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用重写原型的方法展开多维数组并输出结果
console.log(multiDimensionalArray.flatten())

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

请添加图片描述

方法十:ES6 扩展运算符

思路:

  • 使用 ES6 扩展运算符 ...,结合递归,逐层展开多维数组。

详细说明:

// 示例多维数组
const multiDimensionalArray = [1, [2, [3, 4]], [5, 6], [7, [8, 9, [10, 11]]]]

// 使用 ES6 扩展运算符展开多维数组并输出结果
const flattenArray = arr => [].concat(...arr.map(item => (Array.isArray(item) ? flattenArray(item) : item)))

console.log(flattenArray(multiDimensionalArray))

参考效果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

这些方法都能够方便地展开多维数组,可以根据个人偏好选择使用。

持续学习总结记录中,回顾一下上面的内容:
实现一个将多维数组展示的方法有哪些,分别是?
方法一:递归展开成一维数组
方法二:嵌套展示结构
方法三:ES6新增的数组扩展方法 flat()
方法四:apply() 结合 concat() 使用以展开成一维数组
方法五:使用 reduce() 结合 concat() 方法展开多维数组
方法六:使用递归的方法进行展开
方法七:使用 toString()split(',') 方法展开多维数组
方法九:利用重写原型的另一种方法
方法十:ES6 扩展运算符

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

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

相关文章

2024 年 Sketch 替代品的最佳选择:Windows、Web 和 Mac 用户的详细比较

什么是Sketch Sketch是一个著名的、越来越受欢迎的矢量图形设计软件,它通过各种有用的UI设计和原型设计工具使这一过程更易于管理。 Sketch于2010年9月首次发布,后来在2012年获得苹果设计奖。对于Sketch来说,这正好停止了Adobe使用当时领先…

JAVA Web 学习(二)ServLet

二、动态web 资源开发技术——Servlet Servlet(小服务程序)是一个与协议无关的、跨平台的Web组件,由Servlet容器所管理。运行在服务器端,可以动态地扩展服务器的功能,并采用“请求一响应”模式提供Web服务。 Servlet的…

基于仿射区间的分布式三相不对称配电网潮流算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于仿射区间的分布式三相不对称配电网潮流算法matlab仿真。 基于仿射区间的,含分布式电源的配电网三相潮流算法,算法涉及仿射,三相&#x…

python爬虫概念及介绍

1. 什么是互联网爬虫? 解释 1 :通过一个程序,根据 Url ( http : // www . taobao . com ) 进行爬取网页,获取有用信息 解释 2:使用程序模拟浏览器,去向服务器发送请求,获取响应信息 2. 爬虫核…

深度学习经典模型之BERT(下)

在"深度学习经典模型之BERT(上)"我们描述了BERT基本信息、意义、与GPT和Transformer的区别、预训练、自监督等相关信息后,本章节将介绍BERT的输入、Encoder、微调及两个主流变种。 BERT inputs 切词方法 BERT的切词方法用的是WordPiece embeddings&…

MongoDB数据模型和WiredTiger读写模型

MongoDB数据模型 思考:MongoDB为什么会使用BSON? BSON协议与数据类型 JSON JSON是当今非常通用的一种跨语言Web数据交互格式,属于ECMAScript标准规范的一个子集。JSON(JavaScript Object Notation, JS对象简谱)即J…

[word] word艺术字体如何设置? #知识分享#职场发展#媒体

word艺术字体如何设置? 在工作中有些技巧,可以快速提高工作效率,解决大部分工作,今天给大家分享word艺术字体如何设置的技巧,希望可以帮助到你。 1、设置艺术字 选中文字,然后点击菜单栏的【插入】按钮一一…

机器学习复习(6)——numpy的数学操作

加减法运算 # 创建两个不同的数组 a np.arange(4) #list(0,1,2,3 b np.array([5,10,15,20]) # 两个数组做减法运算 b-a 运行结果: 计算数组的平方 #b*2代表数组b每个元素乘以2 #b**2代表数组b每个元素的2次方 b**2 运行结果: 计算数组的正弦值 #…

8.DNS域名解析服务器

目录 1. 概述 1.1. 产生原因 1.2. 作用: 1.3. 连接方式 1.4. 因特网的域名结构 1.4.1. 拓扑: 1.4.2. 分类 1.4.3. 域名服务器类型划分 2. DNS域名解析过程 2.1. 分类: 2.2. 解析图: 2.2.1. 图: 2.2.2. 过…

【学网络安全】kali linux入门及常用简单工具介绍(附工具包)

前言 相信很多同学了解到和学习网络安全的时候都听过kali系统,大家都称之为黑客最喜爱的系统,那么什么是kali,初学者用kali能做些什么,我将在本文中做简单的介绍 一、kali linux是什么? Kali Linux 是专门用于渗透测…

数据结构_单链表题-2.1

一. 反转单链表 将一个单链表反过来。 个人思路(一团浆糊大错特错) 反转嘛,变最后为起点,依次反转过来就行了。 1)找到最后三个链表结点,分别保存下来,以最后一个为首地址。 2)最…

整数对最小和 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 给定两个整数数组array1、array2,数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素&am…

Qt扩展-muParser数学公式解析

muParser数学公式解析 一、概述1. 针对速度进行了优化2. 支持的运算符3. 支持的函数4. 用户定义的常量5. 用户定义的变量6. 自定义值识别回调7. 其他功能 二、内置函数三、内置二元运算符四、三元运算符五、内置常量六、源码引入1. 源码文件2. 编译器开关1. MUP_BASETYPE2.MUP_…

配置支持 OpenAPI 的 ASP.NET Core 应用

写在前面 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 本文记录如何配置基于Swagger 的 ASP.NET Core 应用程序的 OpenAPI 规范。 需要从NuGet 安装 Swashbuckle.AspNetCore 包 代码实现 var builder WebApplicati…

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证

如何在 Golang 中使用 crypto/ed25519 进行数字签名和验证 引言crypto/ed25519 算法简介环境搭建和准备工作生成密钥对进行数字签名 验证签名实际应用场景案例总结 引言 在当今数字化时代,网络安全显得尤为重要。无论是在网上进行交易、签署合同,还是发…

大模型创业的3条军规

上周,一家初创公司未能围绕LLM和 RAG 开展业务,尽管他们获得了第一份 B2B 大型合同。 以下是原因以及如何避免这种情况: 创始人写了一篇博客解释了为什么他不得不关闭他的业务,我在这里总结了他的要点。 NSDT工具推荐&#xff1a…

基于VMware和Unbuntu18.04编译 嘉立创·泰山派 Linux SDK

主机硬件要求 内存最少32G 硬盘腾出200-500G,虽然编译最终占了73G,但富余一些以后可以搞别的方便 操作系统win7/10/11 VMware 安装 1.去vmware官网下载:https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_comp…

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

2024最新版MongoDB安装使用指南

2024最新版MongoDB安装使用指南 Installation and Usage Guide of the Latest MongoDB Community Edition in 2024 By JacksonML MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need. – mon…

网络异常案例三_RST

问题现象 在做功能测试的时候,经常看到设备离线的消息(MQTT遗嘱)。 在终端连接的网络设备上抓包分析,看到终端设备发起大量的RST请求。 151这个设备,7min,重置断开了8个TCP连接(mqtt连接&#…