javascript数组拍平方法总结


Posted in Javascript onJanuary 20, 2018

在开发过程中有得时候总是碰一些共性的问题,比如将一个二维数组拍平成一维数组,或者三维数组拍平成一维数组。这些问题在遇到的时候总会重新思考,不如将其提炼出来,总结一下。

下面笔者将为大家演示一下,将一个多维数组拍平成一个一维数组的两种方法,算是抛砖引玉,大家有更好的方法可以在留言区发表。

首先是第一种方法,递归处理,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function product() {
 // 1、创建一个空数组,
 var newarr = [];
 ///2、并且返回一个函数,函数参数为要拍平的数组
 return function flatten(arr) {
  // 3、循环数组,判断每一项,不为输的话将其塞入newarr
  // 若为数组,递归调用 faltten,并将结果与newarr合并
  for (var t of arr) {
   if (!Array.isArray(t)) {
    newarr.push(t);
   } else {
    newarr.concat(flatten(t))
   }
  }
  return newarr
 }
}
var flatten = product();
console.log(flatten(arr))

执行结果为:

javascript数组拍平方法总结

上面这这种方法比较中规中矩,代码详解见注释,下面这种方法运用到了javascript语言的一些新特性,代码如下:

var arr = [1, 2, 3, [3, 3, 3, [5, 4, 5, 6, 6, 7, 8]],
 [333, 4444]
];
function flatten(arr){
 return arr.reduce(function(pre,cur){
  if(!Array.isArray(cur)){
   return [...pre,cur];
  }else{
   return [...pre,...flatten(cur)]
  }
 },[])
}
console.log(flatten(arr))

上面代码中用了ES6的一个新特性扩展云算法 “...”,“[...abc,...fff]”其作用相当于abc.concat(fff),这种用法更加直观明了,还有就是运用了reduce方法。reduce是javascript语言中数组的一个方法。

数组调用recduce方法时,可以传递两个参数,第一个参数为回调函数,第二个参数为一个初始值。回调函数中需要传递两个参数,第一个参数为每次执行函数的返回值,第二个参数为当前索引对应数组的值。reduce的第二个参数是可以省略的,省略的话,回调函数第一次调用的参数为数组的第一项和第二项的值,如果没有省略,回调函数的第一个参数就是这个初始值。上面的例子,reduce的第二个参数设置了一个空数组。

reduce的文档地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

相比来说第一种比较好理解,第二种的难点在于对reduce函数的运用和理解。

Javascript 相关文章推荐
javascript globalStorage类代码
Jun 04 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
ie下$.getJSON出现问题的解决方法
Feb 12 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
Feb 15 Javascript
javascript 开发之百度地图使用到的js函数整理
May 19 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
Oct 11 Javascript
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
js Array.slice的8种不同用法示例
Jul 10 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 #Javascript
详解Node.js模板引擎Jade入门
Jan 19 #Javascript
JS实现碰撞检测的方法分析
Jan 19 #Javascript
angular1配合gulp和bower的使用教程
Jan 19 #Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 #Javascript
Angular实现搜索框及价格上下限功能
Jan 19 #Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 #Javascript
You might like
提升PHP速度全攻略
2006/10/09 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python pandas 时间日期的处理实现
2019/07/30 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
本科生求职简历的自我评价
2013/10/21 职场文书
客户接待方案
2014/02/26 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android