推荐阅读:

js对象扁平化:_南北极之间的博客-CSDN博客_js扁平化js对象扁平化的方法:1、使用 concat() 方法在2、 使用 flat() 方法3、使用用户定义的函数此示例将设置一个包含数组对象、普通对象和嵌套对象的对象。我们将在方法和方法的帮助下展平整个对象。将返回一个包含所有其他对象的数组,并将合并这些对象。 输出: 所有对象都平展在单个数组中,嵌套对象是该合并数组的成员。在输出中,您几乎无法区分先前的键值对。我们分离了键,并用值将它们连接起来。在这里,我们将观察一个类似的对象,以展平其组件。我们将使用该方法来平展主对象的各个对象的值。因此,我们只会得到https://blog.csdn.net/qq_22182989/article/details/125496432

什么是数组扁平化?

数组扁平化:指将一个多维数组转化为一个一维数组。

给定数组:

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];

目标值:

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

方法:

​ 解决方案 1:使用 concat() 和 apply() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray = [].concat.apply([], myArray);return myNewArray;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

​ 解决方案 2:使用 reduce() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray =  myArray.reduce(function(prev, curr) {return prev.concat(curr);
});return myNewArray;}flatten(myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.reduce((res,next) =>{return res.concat(Array.isArray(next)? flatten(next) : next);},[]);}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 3:递归遍历

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let result = []for (const item of arr) {if (Array.isArray(item)) {result = result.concat(flatten1(item))} else {result.push(item)}}return result}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 4:在 ES6 中使用点差运算符(扩展运算符)

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray =  [].concat(...arr);return myNewArray;}flatten(myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

​ 解决方案 5:在 ES10 中使用 flat() ​

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray =  myArray.flat();return myNewArray;}flatten(myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 6:for循环

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var res = [];for (let i = 0, length = arr.length; i < length; i++) {if (Array.isArray(arr[i])) {res = res.concat(flatten(arr[i])); //concat 并不会改变原数组//res.push(...flatten(arr[i])); //扩展运算符} else {res.push(arr[i]);}}return res;}flatten(myArray);
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {var myNewArray =  [];
for (var i = 0; i < arr.length; ++i) {for (var j = 0; j < arr[i].length; ++j)myNewArray.push(arr[i][j]);
}return myNewArray;}flatten(myArray);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案7:while循环

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];
function flatten(arr) {while (arr.some(item => Array.isArray(item))) {arr = [].concat(...arr);//arr = Array.prototype.concat.apply([],arr);}return arr;}flatten(myArray);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 8:使用toString()+split()或者join()+split()

原理很简单,先把数组转换成字符串,这个过程会吧[]去掉,然后再调用split()方法转换成数组,最后不能忘了,吧每一项转换为数组,即调用map()方法。

方法1:arr.toString().split(',').map(item => +item);

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.toString().split(',').map(item => +item);}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

方法2:arr.join(',').split(',').map(item => +item);

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {return arr.join(',').split(',').map(item => +item);}flatten(myArray);(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 9:正则表达式

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let result = JSON.stringify(arr); // JSON.stringify 转换后的结果 '[1,[2,34,[12,4]],23]'result = result.replace(/(\[|\])/g, '');return JSON.parse(`[${result}]`)}flatten(myArray);(9) [1, 2, 3, 4, 5, 6, 7, 8, 9]

解决方案 10:栈

var myArray = [[1, 2],[3, 4, 5], [6, 7, 8, 9]];function flatten(arr) {let res = [];const stack = [].concat(arr);while (stack.length > 0) {// pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。const item = stack.pop();if (Array.isArray(item)) {/*** push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。* 用扩展运算符展开一层*/stack.push(...item);} else {// unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度(该方法修改原有数组)。item !== undefined && res.unshift(item);}}return res;}flatten(myArray);// [1, 2, 3, 4, 5, 6, 7, 8, 9]

资料:

JS数组扁平化的一些方法(7-8种) - 掘金引子:这些日子在看es相关的新属性是有一个数组的方法 flat() 引起的我的注意。 我去找了一下维基百科,上面并没有关于扁平化的直接解释,只有一个扁平化组织释义。 金字塔组织,这个众所周知,它表现的层级结构就是一个金字塔式的形状。 扁平化组织(Flat organizatio…https://juejin.cn/post/6844903805876699150js数组扁平化的六种方法_爱吃肉的薄凉的博客-CSDN博客_js数组扁平化处理我也不知道为什么要整理这么多种方法,算是拓展个思路吧。

JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)相关推荐

  1. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  2. Javascript对象进行扁平化处理

    Javascript对象进行扁平化处理 笔主在经过多次的笔试中,发现经常会遇到对象扁平化处理的编程题,但是在笔试过程中,脑子一片空白,以至于没有平常心的去对待问题的本质. 扁平化处理简而言之就是对对象 ...

  3. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个扁平化风格css螃蟹图形~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个扁平化风格css螃蟹图形~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <! ...

  4. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。

    推荐一款适用所有Javascript运行环境的二维码生成组件. uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js应用 ...

  5. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组

    Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组.split函数垂直拆分二维numpy数组 目录

  6. PHP常用数组函数(含按键值删除二维数组中的元素)

    // 1.array_search():在数组中搜索键值"red",并返回它的键名 $a=array("a"=>"red"," ...

  7. 遍历二维数组_Java编程基础阶段笔记 day06 二维数组

    二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...

  8. Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标

    *8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置.返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标 题目 题目描述与运行示例 破题 代码 题目 ...

  9. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

最新文章

  1. 自己理解接口回调入门
  2. Amy Mcdonald - This is the Life
  3. socket read阻塞_go tcp中的ioutil.ReadAll阻塞的问题
  4. shell echo 换行 不换行 打印换行
  5. Oracle DB 服务器 系统时间修改问题 与 SCN 关系的深入研究
  6. mysql创建非聚集索引_聚集索引和非聚集索引的区别
  7. 如何应对多GPU大规模训练的挑战?
  8. VTK:绘图之SurfacePlot
  9. 具有多个查询参数的Camel CXF服务
  10. 浅谈Fluent Ribbon 中的SplitButton
  11. Python 密文转换为明文
  12. 黑马程序员 Python学习笔记之PyCharm 的初始设置
  13. WebView 加载网页 加载资源 总结 MD
  14. 网站如何被百度蜘蛛快速抓取?
  15. Can I use 前端兼容性自查工具
  16. 交叉验证中cv=? 与 cv=KFold(n_splits=?)的区别
  17. python三张照片画面拼接
  18. 洛谷 P3620 - P3621 数据备份、风铃、动物园(APIO 2007)
  19. Android 按钮点击设置静音
  20. 解决MAC 安装绿联网卡驱动无效问题

热门文章

  1. java coalesce_java-具有休眠条件的COALESCE函数
  2. 调试Tomcat服务器的项目遇到resource notfounded 问题解决方法
  3. 实现【企业微信自建应用使用uni-app H5 开发】,并解决【uni-app集成微信JSSDK(wx、jWeixin)变量冲突问题】
  4. 数据挖掘竞赛黑科技——对抗验证(Adversarial validation)
  5. vue vue-amap 报错TypeError: v.w.uh is not a constructor
  6. 基于Merkle-Patricia树的实时审计
  7. 国内银行接连爆出数据泄露事件,金融行业如何在源头处建立防线
  8. 周星驰进军web3引发怎样的思考?
  9. vue表单提交数组_ajax传递数组、form表单提交对象数组
  10. 传统银行“亮剑”互联网金融 直销银行是利器