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

JavaScript数组扁平化(Array Flattening)全解析:从基础到进阶的9种实现方式及深度对比 本文系统总结了JavaScript中数组扁平化的实现方法与应用场景。主要内容包括: 原生方法:介绍Array.prototype.flat()、扩展运算符+concat等方法的使用与局限; 递归与迭代:对比递归遍历、迭代循环等实现方式的优缺点; ES6新特性:展示Generator函数、解构赋值等新特性的应用; 第三方库:提及Lodash的工业级实现方案。文章通过代码示例详细说明各方法的适用场景、性能表现和注意事项,为处理多维数组提供了全面的技术方案参考。 阅读详情

一、什么是数组扁平化

扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁、简单,突出主题。
数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层的数组。

Ps: flatten 可以使数组扁平化,效果就会如下:

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr)); // [1, 2, 3, 4]

从中可以看出,使用 flatten 处理后的数组只有一层,下面我们来试着实现一下。

二、简单实现

1普通递归

/* ES6 */
const flatten = (arr) => {
  let result = [];
  arr.forEach((item, i, arr) => {
    if (Array.isArray(item)) {
      result = result.concat(flatten(item));
    } else {
      result.push(arr[i])
    }
  })
  return result;
};

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));

2.toString()
该方法是利用 toString 把数组变成以逗号分隔的字符串,然后遍历数组把每一项再变回原来的类型。
先来看下 toString 是怎么把数组变成字符串的

[1, [2, 3, [4]]].toString()
// "1,2,3,4"

完整的展示

/* ES6 */
const flatten = (arr) => arr.toString().split(',').map((item) => +item);

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));
//[1,2,3,4]

3 [].concat.apply + some
利用 arr.some 判断当数组中还有数组的话,循环调用 flatten 扁平函数(利用 [].concat.apply扁平), 用 concat 连接,最终返回 arr;

/* ES6 */
const flatten = (arr) => {
  while (arr.some(item => Array.isArray(item))){
    arr = [].concat.apply([], arr);
  }
  return arr;
}

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));

4.reduce()
reduce 本身就是一个迭代循环器,通常用于累加,所以根据这一特点有以下:

function flatten(arr){
  return arr.reduce(function(prev, cur){
    return prev.concat(Array.isArray(cur) ? flatten(cur) : cur)
  }, [])
}

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));


5.es6结构运算符
… 每次只能展开最外层的数组,被 [].concat 后,arr 就扁平化一次。

function flatten(arr){
  while(arr.some(item => Array.isArray(item))){
    arr = [].concat(...arr);
  }
  return arr;
}

const arr = [1, [2, [3, 4]]];
console.log(flatten(arr));

多维数组扁平化处理 数组扁平化: 就是把多层嵌套的数组中的内容取出,变成一维的数组 就像 [1, 2, 3,[4, 5], [6, 7, [8, 9]], 10,11] 处理成 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 1. 递归方式处理 咱们在写递归的时候,其实只需要考虑两层就好,因为再往后其实就是和之前一样了,要不然一直跟着程序的执行想下去 ,搞不好连自己都绕进去了 let arr = [1, 2, 3, [4, 5], [6, 7, [8, 9]], 10, 11] funct. 阅读详情

相关推荐

Windows 11下JDK 21与JMeter 5.6.3环境配置全攻略

环境变量是操作系统管理软件路径与执行权限的核心机制,它通过预设的键值对,指引系统在调用命令时定位可执行文件。理解其工作原理,是解决软件安装后“命令未找到”等问题的关键。对于Java生态而言,正确配置JAVA_HOME和Path变量,不仅能让java、javac等基础命令全局可用,更是Maven、Gradle乃至JMeter等众多工具链顺畅运行的基石。JMeter作为一款基于Java开发的经典性能测试与接口测试工具,其稳定运行高度依赖健全的Java环境。本文聚焦于在Windows 11系统上,为JDK 21与

weixin_30940783的博客 451

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

实现数组扁平化的 6 种方式 扁平化的实现: 数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组。即: [1, [2, [3, 4,5]]] ----> [1, 2, 3, 4,5] 方法一:调用 ES6 中的 flat arr.flat([depth]) 其中 depth 是 flat 的参数,depth 是可以传递数组的展开深度(默认不填、数值是 1),即展开一层数组。那么如果多层的该怎么处理呢?参数也可以传进 Infinity,代表不论多少层都要展

weixin_44920863的博客 3753

给宇树Go2机器人装‘眼睛’:在Jetson Orin Nano上从零部署YOLOv5的保姆级避坑实录

本文详细介绍了在Jetson Orin Nano上为宇树Go2机器人部署YOLOv5视觉系统的完整流程,涵盖硬件选型、环境配置、模型优化及系统集成等关键步骤。针对机器人应用场景特有的离线部署、版本冲突和实时推理等挑战,提供了实用的解决方案和性能优化技巧,帮助开发者快速实现机器人的视觉能力升级。

weixin_29169505的博客 378

数组扁平化的8种方法

什么是数组扁平化;超全的数组扁平化方法归纳

weixin_45185103的博客 7267

ATAC-seq数据分析流程学习记录及总结

记录ATAC-seq数据分析流程,主要是参考健明老师的教程以及网上各种学习资源进行总结,网址在下面。

ACGTexplorer的博客 3755

R语言分布式滞后非线性模型DLNM实战:空气污染与健康数据的动态效应可视化与政策启示

本文详细介绍了R语言中分布式滞后非线性模型(DLNM)的应用,特别关注空气污染与健康数据的动态效应可视化。通过dlnm包实现PM2.5等污染物的滞后效应分析,提供从数据预处理、模型构建到结果可视化的完整流程,并探讨了其在公共卫生政策制定中的实际应用价值。

weixin_29079643的博客 514

数组扁平化的8种方法 - js篇

用简单的话来说,就是将一个。

阿莹yes的博客 2237

Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

【代码】Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

weixin_39169967的博客 4145

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

数组偏平化 数组的扁平化就是将一个嵌套多层的数组转换为只有一层的数组,扁平化也是面试中常见的考题。举个简单的例子,假设有个名为 flatDeep 的函数能实现数组扁平化效果,代码运行效果如下面: var array = [1, [2, [3, [4, 5]]]]; console.log(flatDeep(array)); // [1, 2, 3, 4,5] 像上述能实现偏平化的flatDeep函数实现方式有好几种,下面就尝试这几种方式实现一个flatDeep函数吧。 方法一:递归 通过循环递归的方式,一

AI小美好 9658

43_AI短片实战第十六弹:AIGC补充特写镜头——首尾帧衔接与多图抽卡技巧

本文介绍了使用Templa AI平台生成"怪兽爬车"特写镜头并衔接"甩尾摔下"动作的完整流程。首先通过AI生成4张怪兽趴在车顶的特写画面,重点选择展示怪兽与车顶关系的构图(16:9比例)。然后将选定的首帧图与已有尾帧图输入AI,生成7秒左右的过渡视频,实现从"稳定趴车"到"开始摔落"的自然衔接。整个过程展示了单图抽卡策略、首尾帧选择标准,以及如何利用AI生成时间进行其他剪辑任务的并行处理方法。最终产出包括特写首帧图、过渡视频文件和更新后的剪辑项目。

Open 79

【AUTOSAR-COM】-10.5-APP CAN Frame/PDU“发送周期不准“的影响因素

一个Tx PDU在COM模块中的数据流; Tx APP CAN Frame/PDU"发送周期不准"的影响因素;

「汽车电子助手」的博客 2386

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

1. 递归调用 let res = []; function flattern(arr) { arr.map(item => { if (Array.isArray(item)) res.concat(flattern(item)); else res.push(item); }) } 2. reduce结合递归 function flattern(arr) { return arr.reduce

aeipyuan 404

YOLO26全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1034

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

1. 利用es6新方法 2. 利用递归 2.1 利用 some 递归 2.2 利用 map 递归 2.3 利用 reduce 递归 3. 利用 toString 4. 利用 join

猫老板的豆 1008

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

qq_52732369的博客 907

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JavaScript数组原理3:实现数组扁平化的几种方式

JavaScript数组原理3:实现数组扁平化的几种方式 数组的扁平化其实就是将一个嵌套多层的数组array(嵌套可以是任意层数)转换为只有一层的数组 举一个代码的例子: var arr = [1,[2,[3,4,5]]]; console.log(flatten(arr));[1,2,3,4,5] ...

sharp0016的博客 312

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js的tree数组对象扁平化思否_JavaScript基础 - 数组扁平化/降维的4种方法

1. Array.prototype.flat()缺点:需要计算数组的维度var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]arr.flat(4); // [1,2,21,22,221,2211,2212,3,31,32,33,331,4,{'name': ...

weixin_39876595的博客 334

数组扁平化(展开多层嵌套数组)

方法一 arr.join(',').split(','); 方法二 const flatten = (arr) => { return arr.reduce( (prev, cur) => prev.concat(cur instanceof Array ? flatten(cur) : cur), [] ) }

Liuer_Qin的博客 744

前端面试题(手写扁平化函数)

前端面试题 —(数组扁平化) RUNOOB—>ES6数组方法flat() 数组扁平化(又称数组降维) MET:flat()方法会按照一个可指定的深度递归遍历数组,并将所有的元素与遍历出来的数组中的元素合并为一个新数组返回; var test = ['a', ['b', 'c'], ['d', ['e', ['f']], 'g']] // flat不传参数时,默认扁平化一层 test.flat() // ["a", "b", "c", "d", ["e", ["f"]], "g"] // flat传

Immerse的 Blog 328

JS面试须知--数组

数组

kxdhshlg的博客 139

经典JS算法

例题1:数组去重 输入:[1,2,2,,6,,10,9,1,3,] 输出:[1,2,6,10,9,1,3] 条件:去掉空、保持输入顺序 function dedupe(arr){ let setArr = new Set(); let res = []; for(let k in arr){ //元素不为空、并且没有在setArr出现过 if( arr[k] != null && !setArr.has(arr[k])){

weixin_41950078的博客 411

js push二维数组_Js面试题:如何实现数组扁平化?

写在前面:数组扁平化是指将一个多维数组变为一维数组,如:将多维数组:[1,[2,3,[4,5]]]转为一维数组:[1,2,3,4,5]如何实现?1.reducefunction flatten(arr) { returnarr.reduce((result,item)=>{returnresult.concat(A...

weixin_39683526的博客 362

数组排序与flat方法

数组排序 arr2 = [13, 24, 51, 3]; arr2.sort(compare); // [3, 13, 24, 51] function compare(a,b){ return a-b; } 降序 function compare(value1, value2) { if (value1 < value2) { return 1; } else if (value1 > value2) { return -1; } else { return 0;

weixin_46845202的博客 172
上一篇: 熬夜总结50个js高级知识点(一)
下一篇: 跨域的几种方法
goodfornothing-s
博客等级 码龄8年 105粉丝 36原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值