javascript数组拍平方法总结

 更新时间:2018年01月20日 09:02:35   投稿:laozhang  
本篇文章给大家详细分析了javascript数组拍平的方法,对此有兴趣的朋友跟着小编一起学习下吧。

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

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

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

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语言的一些新特性,代码如下:

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函数的运用和理解。

相关文章

  • fetch跨域问题的使用详解

    fetch跨域问题的使用详解

    这篇文章主要介绍了fetch跨域问题的使用详解,fetch 的核心主要包括:Request , Response , Header , Body,利用了请求的异步特性 --- 它是基于 promise 的,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • js判断iframe中元素是否存在的实现代码

    js判断iframe中元素是否存在的实现代码

    这篇文章主要介绍了js判断iframe中元素是否存在的实现代码,需要的朋友可以参考下
    2016-12-12
  • 深入理解JavaScript强制类型转换

    深入理解JavaScript强制类型转换

    JavaScript中的强制类型转换包括显式和隐式转换,涉及字符串、数字和布尔值三种基本类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09
  • JS幻想 读取二进制文件

    JS幻想 读取二进制文件

    如果说让JavaScript读取站点上一文本文件,那不过是个再简单不了的事了;但若说要换成一个二进制的文件,并且是完全静态的读取,那似乎有点天方夜谭了。
    2009-04-04
  • JavaScript实现的鼠标跟随特效示例【2则实例】

    JavaScript实现的鼠标跟随特效示例【2则实例】

    这篇文章主要介绍了JavaScript实现的鼠标跟随特效,结合2则实例形式分析了javascript针对鼠标事件的响应、计算、处理及页面元素动态操作相关实现技巧,需要的朋友可以参考下
    2018-12-12
  • 如何使用TypeScript实现一个浏览器事件的集中管理

    如何使用TypeScript实现一个浏览器事件的集中管理

    这篇文章主要介绍了使用TypeScript实现一个浏览器事件的集中管理,浏览器事件模型的主要优点是它可以使开发人员更加灵活地处理用户交互,并且可以通过事件委托等技术来提高性能,本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-06-06
  • javascript获取表格 td 中的内容

    javascript获取表格 td 中的内容

    可以获取html table中的td中的内容。非常的不错。
    2009-07-07
  • js捆绑TypeScript声明文件的方法教程

    js捆绑TypeScript声明文件的方法教程

    TypeScript 是 JavaScript 的超集,相比 JavaScript,其最关键的功能是静态类型检查 (Type Guard)。下面这篇文章主要给大家介绍了关于js捆绑TypeScript声明文件的相关资料,需要的朋友可以参考下。
    2018-04-04
  • 浅谈js键盘事件全面控制

    浅谈js键盘事件全面控制

    下面小编就为大家带来一篇浅谈js键盘事件全面控制。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 简单的仿Flash文字动画(兼容Mozilla)

    简单的仿Flash文字动画(兼容Mozilla)

    简单的仿Flash文字动画(兼容Mozilla)...
    2007-01-01

最新评论