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数组拍平方法是来详解

立即学习“Java免费学习笔记(深入)”;

上面这这种方法比较中规中矩,代码详解见注释,下面这种方法运用到了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函数的运用和理解。

相关推荐:

php找出范围内回文数且平方根也是回文数的方法

JavaScript基于牛顿迭代法实现求浮点数的平方根实例分析

关于php开平方问题

以上就是javascript数组拍平方法是来详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2789248.html

(0)
上一篇 2025年3月8日 18:40:22
下一篇 2025年2月28日 19:10:26

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vue.js数据传递以及数据分发slot实例详解

    本文主要给大家通过代码实例分析了vue.js数据传递以及数据分发slot的相关知识,有这方面兴趣的朋友参考下吧,希望能帮助到大家。 一、组件间的数据传递 1.父组件获取子组件的数据   *子组件把自己的数据,发送到父级 *vm.$emit(…

    2025年3月8日
    200
  • Vue的ajax公共方法实例详解

    本文主要为大家分享一篇基于vue的ajax公共方法(详解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 为了减少代码的冗余,决定抽离出请求ajax的公共方法,供同事们使用。 我使用了ES6语法,编写了…

    编程技术 2025年3月8日
    200
  • Vue-cli引入第三方JS和CSS方法详解

    本文主要为大家分享一篇vue cli 引入第三方js和css的常用方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到到大家。 第一种方法: 直接在index.html中引入 js 登录后复制 css 立即学习…

    编程技术 2025年3月8日
    200
  • js将当前时间格式化为年月日时分秒格式详解

    本文主要介绍了js将当前时间格式化为 年-月-日 时:分:秒主要是使用js的date()对象,将系统当前时间格式化为年-月-日 时:分:秒,需要的朋友可以参考下,希望能帮助到大家。 利用js的Date()对象,将系统当前时间格式化为年-月-…

    2025年3月8日
    200
  • node.js中的npm和webpack配置方法详解

    node.js用c++语言编写而成的,是一个基于chrome v8引擎的javascript运行环境,让javascript的运行脱离浏览器服务端,可以使用javascript语言书写服务器端代码,主要介绍了详解node.js中的npm和w…

    2025年3月8日
    200
  • bmob js-sdk 在vue中的使用教程实例分享

    将bmob js-sdk放在static目录,然后在index.html页面中已 script 标签的形式引入,就可以在vue中全局使用bmob js-sdk。本文主要给大家分享bmob js-sdk 在vue中的使用教程,需要的朋友参考下…

    编程技术 2025年3月8日
    200
  • 原生js封装ajax兼容jsonp实例分享

    本文主要为大家带来一篇使用原生js封装的ajax实例(兼容jsonp)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 实例如下: /* 封装ajax函数 * @param {string}…

    编程技术 2025年3月8日
    200
  • es6三点运算符的使用方法详解

    本文主要为大家带来一篇基于三点运算符的使用方法(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 先看一个es6规范下三点运算符的使用实例: let fun=function(a,…

    编程技术 2025年3月8日
    200
  • JavaScript的innerWidth与innerHeight使用详解

    本文主要为大家带来一篇浅谈javascript的innerwidth与innerheight。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 innerWidth与innerHeight属性…

    编程技术 2025年3月8日
    200
  • JS封装animate运动框架的实例详解

    本文主要为大家带来一篇原生js封装animate运动框架的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 如下所示: nbsp;html>p {width: 100px;heig…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论