当前位置: 首页 > news >正文

实现数组扁平化的几种方式

目标: 实现数组扁平化[1,[2,[3,4,5]]] ==> [1,2,3,4,5]

我们有几种方法可以实现,分别为:

1、递归

function flatten(list){return list.reduce((tar, cur) => {if(Array.isArray(cur)){tar = tar.concat(flatten(cur));} else {tar.push(cur);}return tar;}, []);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

递归的方法就是一直合并数组中是数组的元素,这里问题不大,这个方法适用于结构相对简单的数据,如果数据量特别的大,使用递归的话,回应性性能

2、toString方法

function flatten(list){let str = list.toString();return str.split(',').map(item => +item);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

使用toString方法可以将数组转化为数组内部元素的字符串,然后针对该字符串返回扁平化的数组,只是这种方法如果遇到包含对象的数组就不行了

3、正则表达式结合JSON

function flatten(list){let newStr = JSON.stringify(list).replace(/\[|\]/g, '');return JSON.parse(`[${newStr}]`);
}
flatten([1,[2,[3,4,5]]]) // [1, 2, 3, 4, 5]

这个办法同样适用于结构相对简单的数组,如果遇到包含对象的数组就不行了

4、终极武器flat

[1,100,[2,[3,4,5]]].flat(3) // [1, 100, 2, 3, 4, 5]

利用数组的flat方法可以实现数组的扁平化
flat() 方法创建一个新的数组,并根据指定深度递归地将所有子数组元素拼接到新的数组中。

flat传入的参数,指定要提取嵌套数组的结构深度,默认值为 1。
假使,我们不知道深度是多少的情况下,可以传入Infinity

[1,100,[2,[3,4,5]]].flat(Infinity) // [1, 100, 2, 3, 4, 5]

另外,使用flat() 方法会忽略数组中的空槽。

[1,2,,3,,,,6].flat() // [1,2,3,6]

所以,利用这个特性,我们还可以用它来删除数组的空槽数据哈!

记住吧!

http://www.lryc.cn/news/414138.html

相关文章:

  • 3D打印技术正悄然重塑模具工业格局
  • 深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战
  • YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)
  • 学习安卓开发遇到的问题
  • 数学建模--禁忌搜索
  • LeetCode 第136场双周赛个人题解
  • The operation was rejected by your operating system. code CERT_HAS_EXPIRED报错解决
  • [Git][基本操作]详细讲解
  • springMVC中从Excel文件中导入导出数据
  • C++的STL简介(三)
  • BERT模型
  • 举例说明计算机视觉(CV)技术的优势和挑战
  • Animate软件基础:关于补间动画中的图层
  • mac|安装hashcat(压缩包密码p解)
  • 【保姆级系列:锐捷模拟器的下载安装使用全套教程】
  • virtualbox7安装centos7.9配置静态ip
  • 结构型设计模式:桥接/组合/装饰/外观/享元
  • vLLM初识(一)
  • 【Apache Doris】周FAQ集锦:第 18 期
  • docker部署可执行的jar
  • OpenCV||超详细的图像处理模块
  • java面向对象期末总结
  • 文件搜索 36
  • IO多路转接
  • 基于深度学习的面部表情分类识别系统
  • 日志远程同步实验
  • 数据结构之《二叉树》(中)
  • php json_encode 参数 JSON_PRETTY_PRINT
  • 【UE 网络】Gameplay框架在DS架构中的扮演的角色
  • 【云原生】StatefulSet控制器详解