数组扁平化处理

【Unity】【模型】【AI建模】如何将AI生成的GLB格式3D模型文件导入Unity 本文介绍了一个将AI工具自动生成的GLB格式3D模型文件转换成fbx模型文件导入Unity的步骤。 阅读详情

今天看到一篇文章,其中讲解了数组扁平化处理的多种方法,个人觉得还是有点意思,现详细讲解几种实现的方法。

  1. 使用forEach
	function  flatten1(arr){
		let res = [];
		arr.forEach((val)=>{				
			res.push( ...( Array.isArray(val) ? flatten1(val) : [val] ) );
		});
		return res;
	}

这个方法没啥好说的,运用了递归,同时使用了...操作符将数组进行了展开

  1. 使用reduce
	function  flatten2(arr){			
		return arr.reduce((prev, curr)=>{				
			return prev.concat( Array.isArray(curr) ? flatten2(curr) :  curr  );			
		}, [] );
	}

这个方法也很好理解,就是使用reduce的特性,同时使用了递归

  1. 使用some
	function  flatten3(arr){
		while( arr.some( val=>Array.isArray(val) ) ){
			arr = [].concat(...arr);
		}
		return arr;
	}

该方法虽然没有前面几种方法实现的n那么优雅,但是还是给了我一些惊喜。因为猛一看,我竟然没发现实现的具体原理。
直到我输入了下面的测试代码,我才明白:

	var a = [].concat(1,2, [3,4]);
	var b = [].concat(1,2,[ [5, 6] , 7 ]);
	console.log(a); //[1, 2, 3, 4]
	console.log(b) ;//[1, 2, Array(2), 7]

也就是说concat中跟随的项可以包含一维数组,而且一维数组会被展开,但二维数组就不可以。这和我预期的还是不一样的。所以还是基础知识不够牢靠啊!

后来查阅了一下MDN,发现这么一个注意

数字和布尔(不是String,Number 和 Boolean 对象):concat将字符串和数字的值复制到新数组中。
注意:数组/值在连接时保持不变。此外,对于新数组的任何操作(仅当元素不是对象引用时)都不会对原始数组产生影响,反之亦然。

也就是说concat对于对象的拷贝是浅拷贝,举个列子:

	var a = [{a:1}, 2], b = [];
	var c = a.concat(b);
	
	c[0].a = 3;
	console.log( a[0].a ); //3

可以看到我们在链接后的新对象c中更改了数组中的第一项的属性a的值,结果这个更改在数组a的第一项也发生了。

从零开始用STM32驱动RGB屏:配置PCLK、DE同步信号的避坑指南 本文详细介绍了如何使用STM32驱动RGB接口LCD屏幕,重点解析了PCLK配置、同步信号极性和DE使能等关键参数的设置方法。通过实战代码示例和常见问题排查指南,帮助开发者避免常见配置错误,实现稳定的显示效果。特别针对800x480 IPS屏提供了优化建议和调试技巧。 阅读详情

相关推荐

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3909

数组扁平化的8种方法

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

weixin_45185103的博客 7267

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 158

面试官:JavaScript如何实现数组拍平(扁平化)方法?

1 什么叫数组拍平? 概念很简单,意思是将一个“多维”数组降维,比如: // 原数组是一个“三维”数组 const array = [1, 2, [3, 4, [5, 6], 7], 8, 9] // 可以降成二维 newArray1 = [1, 2, 3, 4, [5, 6], 7, 8, 9] // 也可以降成一维 newArray2 = [1, 2, 3, 4, 5, 6, 7, 8, 9] 数组拍平也称数组扁平化、数组降维。 2 JS标准库中的数组拍平方法 JavaScript标准库中已经实现

qq_38650754的博客 2360

卡尔曼滤波、互补滤波与Tsinghua滤波:平衡车姿态感知的三大算法对比

本文对比了平衡车姿态感知中的卡尔曼滤波、互补滤波与Tsinghua滤波三大核心算法。互补滤波计算简单,适合入门;卡尔曼滤波理论最优但实现复杂;Tsinghua滤波则是一种面向嵌入式优化的轻量级方案,通过动态权重调整和零偏估计,在资源受限的MCU上实现了性能与效率的平衡,是智能车竞赛等场景的实用选择。

weixin_29232121的博客 349

汽车TSN时间敏感网络测试技术与探索系列讲座4 -TSN802.1AS同步要求及验证方法

TSN网络各设备类型同步性能要求是什么?各类设备的测试组网及测试内容。也将通过演示来展示相关测试结果,及如何解决上述的测试关注点。

weixin_43903833的博客 761

扁平化处理

扁平化处理是指将一个多维数组转换为一个一维数组

weixin_52793430的博客 870

宇树智能人形机器人模块化腿部动力系统技术拆解

o电机防摔防护板(3.1.5.1)→端盖总成(3.1.5.2)→电机外壳(3.1.5.4)的冲击力传递路径;o散热风扇(3.1.3.1)推动冷风→大腿基座腔体→散热片组(3.1.5.7)→中空大腿杆排出;o防御专利:覆盖“关节热管理风道接口标准”、“抗冲击结构身份编码”;o大腿杆腔体(3.1.3.4)内置反平行四边形机构,避免连杆外露。:力传感器(3.1.8.4.2)仅部署于足端,缺失关节力矩反馈。:更换行星减速器(3.1.5.5)需拆解整个电机模块;o热量传导路径:电机定子→外壳→散热片组。

weixin_50955533的博客 1232

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

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

阿莹yes的博客 2237

UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview

随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。

MarcoPro的博客 1633

Android日志实战——车机日志获取(十五)

这个项目中的 Log 管理系统,其实只是将系统原生 Log 进行输出并导出,并没有太复杂的操作。还有一种 Log 管理系统需要对 Android 原生 Log 系统进行重写,例如我们使用 Log.d(tag, msg) 打印 Log,需要我们根据 tag 信息将不同模块的 Log 数据写入不同的本地文件下,这样可以方便不同模块查看自己的 Log,追踪异常问题。

小旭的专栏 3778

数组扁平化(四种方法)

数组扁平化的四种方法(递归、正则+JSON、flat()、 toString()+split()+map()+parseInt()),将多维数组转化为一维数组。例如[ 1,[2,3],[4,[5] ] ] -------> [1,2,3,4,5]

LxyingINGing的博客 2608

修改legged_gym地形后仍然是平地,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1563

js处理数组扁平化的几种方法

时,表示无限深度的扁平化,即会将数组中所有嵌套的数组全部递归地展开,直到没有嵌套数组为止。数组,而是返回一个浅拷贝,该浅拷贝包含了原始数组中相同的元素。参数指定扁平化的深度,默认为 1,当 参数设置为。

qq_48812041的博客 547

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数组的扁平化处理

数组扁平化就是把二维三维。。。数组转化成一维普通数组。 官方提供的方法是flat flat函数默认参数是1,可以将二维数组转化成一维数组,以此类推参数是2可以将三维数组转化成一维数组,参数为Infinity可以将任意维度的数组转化成一维数组。 console.log([1, [2, 3]].flat()); // [1, 2, 3] console.log([1, [2, 3]].fla...

qq_35134066的博客 452

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

js处理数组扁平化、数组层级化

在项目中经常遇到需要处理后台给的数据情况,有的数据需要处理成树形结构进行展示,有的数据需要一维数组进行过滤 应用场景: 层级数据常用于层级节点的展示,例如Element的tree组件 扁平数据常用于权限过滤,例如: v-if=‘haha.incluedes(''heiehi")’ 数据demo: 层级数据是有父子关系的数组,且子节点都会放到该节点的chilren下 扁平化数据是一个一维数组,里面可能有parentId标明该节点的父节点id // 层级数据: tree = [ {

zuggs_的博客 3666

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

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

数组的扁平化处理(flat)

数组方法(flat)

zhanggei的博客 2341

web前端数组处理之扁平化数组

在进行前端开发的时候避免不了会遇到很多数组的情况,其中不乏会存在数组套数组或者需要合并数组的情况,今天小千就来给大家介绍一下如何将数组扁平化处理。 数组扁平化概念:用于将嵌套多层的数组“拉平”,变成一维的数组 方法一:通过concat将二维数组转化为一维数组 原理:通过将扩展运算符,将数组内部展开,并通过concat连接两个字符串的方式返回一个新的数组。 方法二:使用数组方法join和字符串方法split进行数组扁平化 原理:通过jo...

452

js 数组扁平化处理flat

js 数组扁平化处理flat1、直接调用flat2、正则表达式匹配3、递归4、数组累加器reduce5、展开运算符...和while循环 1、直接调用flat flat (arr) { return arr.flat(Infinity) }, 2、正则表达式匹配 flat1 (arr) { const str = JSON.stringify(arr) const reg = /(\[\]))/g return str.replace

Ms.杨 575

数组扁平化的几种处理放法

清明节,这几天放假闲来无事,好好研究一下基础知识,今天看看数组扁平化该怎么处理: 先来看数组扁平化是什么: var arr = [1,2,3,4,[5,6,[7,8]],true] => [1,2,3,4,5,6,7,8,true] 就是把二维或者多维数组,转成一维数组。 1、我想大部分同学会和一样,首先想到的肯定是遍历数组,如果某一项是基本数据类型,直...

angouboxie05052的博客 222

js的tree数组对象扁平化思否_js中数组扁平化处理

js中数组扁平化处理经典面试题,项目中可以用到js数组操作的地方很多,js数组扁平化是其中一种什么是数组扁平化?数组扁平化就是将一个多维数组转换为一个一维数组实现的基本方式1、对数组的每一项进行遍历。2、判断该项是否是数组。3、如果该项不是数组则将其直接放进新数组。4、是数组则回到1,继续迭代。5、当数组遍历完成,返回这个新数组。实现数组扁平化代码1.常规方式 递归处理Array.prototyp...

weixin_39814960的博客 651

数组扁平化 递归处理

i++) {} else {return res;

weixin_74420008的博客 467

js中数组扁平化处理

经典面试题,项目中用js数组操作的地方很多,js数组扁平化是其中一种 什么是数组扁平化? 数组扁平化就是将一个多维数组转换为一个一维数组 实现基本方式 1、对数组的每一项进行遍历。 2、判断该项是否是数组。 3、如果该项不是数组则将其直接放进新数组。 4、是数组则回到1,继续迭代。 5、当数组遍历完成,返回这个新数组。 1.常规方式 递归处理 Array.prototype.flatten = function () { var resultArr = []; var len = this.le

田兴的博客 3462

数组扁平化处理常用的俩种方法。 奥利给!

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body&gt

qq_42957741的博客 329

数据扁平化之数组处理

数据扁平化之数组处理 **假设有一个数组 const arr = [1,[2,[3,[4,5]]],6]; 如何将其从多维数组变为一维数组 方法一: 使用flat()方法 const res1 = arr.flat(Infinity); 方法二 使用reduce const flatten = arr =>{ return arr.reduce((pre,cur) => { return pre.concat(Array.isArray(cur) ? flatten(cur)

weixin_46962787的博客 468
上一篇: JS中的模块化
下一篇: 剑指offer--圆圈中最后剩下的数
izwell
博客等级 码龄14年 16粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值