数组扁平化,就是将多维数组碾平为一维数组,方便使用。

一:例如,一个二维数组 var arr = ['a', ['b', 2], ['c', 3, 'x']],将其扁平化:

1.  通过 apply 借用数组的 concat 方法:

[].concat.apply([], arr);

结果如下:

jQuery 中的 map 方法就用到了这个技巧。

但如果直接调用 concat 方法,[].concat(arr),就没有扁平化效果。

2扩展运算符...

[].concat(...arr)

3. reduce(ES5新增的数组方法):

[['a'], ['b', 2], ['c', 3, 'x']].reduce((a, b) => a.concat(b), []);

二:对于三维及以上的数组:

1. 数组每一项都是简单类型,如数字:

var arr = [[1], [[2, 3], [4]], 5, 6];
arr.toString().split(',').map(item => +item);

2. 递归:

 var flatten = function(arr) {
var isArray = function(arr) {
return Array.isArray(arr) || Object.prototype.toString.call(arr) === '[object Array]';
},
ret = [],
item; if (!isArray(arr)) {
return;
} for (var i = 0; i < arr.length; i++) {
item = arr[i];
if (isArray(item)) {
ret = ret.concat(flatten(item));
} else {
ret.push(item);
}
} return ret;
}; flatten( [ 'a', [[[['b', 2]]]], ['c', [3, 'x']] ] );

该方法对任意维数组都有效。

三:flat (ES6方法)

flat(Infinity) 可将任意维数组转成一维数组

最新文章

  1. 用python实现的百度音乐下载器-python-pyqt-改进版
  2. 关于在Linux64位下安装xampp
  3. hibernate中一对多关系中的inverse,cascade属性
  4. Markdown渲染后文章标题收缩控件
  5. JavaScript可否多线程? 深入理解JavaScript定时机制
  6. Consul 服务发现和配置
  7. yum综合梳理
  8. Django项目中如何建表?怎样导入数据?
  9. IdTcpClient简单示例
  10. SharePoint 2010中使用SPListItemCollectionPosition更快的结果
  11. 兔子--Fragment与ViewPager要切换滑动效果
  12. js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!
  13. Tempdb总结
  14. 打开Voice Over时,CATextLayer的string对象兼容NSString和NSAttributedString导致的Crash(一现象)
  15. 微信公众号开发C#系列-2、微信公众平台接入指南
  16. Java中的队列同步器AQS
  17. Unity 角色移动贴墙行走
  18. idea中的常用快捷键
  19. MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO&#39;root&#39;@&#39;%&#39;I MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO&#39;root&#39;@&#39;%&#39;I
  20. 【文文殿下】[APIO2010]特别行动队 题解

热门文章

  1. Luogu2261[CQOI2007]余数求和 【数论】By cellur925
  2. 定位,标记,Socket通信传输位置
  3. Centos 7.x 配置Gitlab
  4. 跟我一起玩Win32开发(12):使用控件——单选按钮
  5. Qt容器类之三:通用算法
  6. [LOJ6041雅礼集训2017]事情的相似度
  7. Queue Sequence HDU - 4441
  8. JAVA常用知识总结(六)——Mybatis
  9. 496 Next Greater Element I 下一个更大元素 I
  10. [已读]HTML5与CSS3设计模式