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 相关文章推荐
使用jQuery的将桌面应用程序引入浏览器
Nov 19 Javascript
IE6 fixed的完美解决方案
Mar 31 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
jquery 操作css样式、位置、尺寸方法汇总
Nov 28 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
SpringMVC+bootstrap table实例详解
Jun 02 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
js实现随机点名器精简版
Jun 29 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
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强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
javascript调试说明
2010/06/07 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
Python的另外几种语言实现
2015/01/29 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
对Python函数设计规范详解
2019/07/19 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Django中使用Celery的方法步骤
2020/12/07 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
高职助产应届生自荐信
2013/09/24 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
企业文化建设实施方案
2014/03/22 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
2019年入党思想汇报
2019/03/25 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
python中的random模块和相关函数详解
2022/04/22 Python