数组扁平化概念

数组扁平化是指将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]

实现

1. reduce

遍历数组每一项,若值为数组则递归遍历,否则concat。

functionflatten(arr) {return arr.reduce((result, item)=>{return result.concat(Array.isArray(item) ?flatten(item) : item);

}, []);

}

reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce包含两个参数:回调函数,传给total的初始值

//求数组的各项值相加的和:

arr.reduce((total, item)=> { //total为之前的计算结果,item为数组的各项值

return total +item;

},0);

2. toString & split

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组

functionflatten(arr) {return arr.toString().split(',').map(function(item) {returnNumber(item);

})

}

因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型

3. join & split

和上面的toString一样,join也可以将数组转换为字符串

functionflatten(arr) {return arr.join(',').split(',').map(function(item) {returnparseInt(item);

})

}

4. 递归

递归的遍历每一项,若为数组则继续遍历,否则concat

functionflatten(arr) {var res =[];

arr.map(item=>{if(Array.isArray(item)) {

res=res.concat(flatten(item));

}else{

res.push(item);

}

});returnres;

}

5. 扩展运算符

es6的扩展运算符能将二维数组变为一维

[].concat(...[1, 2, 3, [4, 5]]); //[1, 2, 3, 4, 5]

根据这个结果我们可以做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。

functionflatten(arr) {while(arr.some(item=>Array.isArray(item))) {

arr=[].concat(...arr);

}returnarr;

}

总结

虽然说写了5种方法,但是核心也只有一个:

遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。

vue 扁平化_5种方式实现数组扁平化相关推荐

  1. 你能想到几种方式实现数组扁平化(越多越好)

    数组扁平化:将一个多维数组,展开成一个一维数 let arr = [1,[2,3],[4,[5,6,[7]]],8]; ⇒ [1,2,3,4,5,6,7,8] 数组中嵌套数组自然会想到利用递归来做,只 ...

  2. JAVA数组扁平化整合_5种方法实现数组扁平化

    数组扁平化概念 数组扁平化是指将一个多维数组变为一维数组 [1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5] 复制代码 实现 1. reduce 遍历数组每一 ...

  3. 指针数组下标JAVA_Java语言中可用下标和指针两种方式表示数组元素。

    [判断题]一行可以写多条预处理命令 [判断题]如果一个java程序中有多个类,编译后只生成一个字节码文件,其名字同主类名一致. [判断题]Protected类型的实例变量只能在本类中使用,其他类中不可 ...

  4. 对连续值/离散值进行预处理的两种方式(标准化/one-hot化)、反标准化/逆标准化、字符串预处理

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) tensorflow 2.0 画出model网络模型的拓扑图 ...

  5. vue引入css三种方式

    vue引入css三种方式 1.在对应.vue文件的中引入 <script> import "@/assets/css/reset.css" </script> ...

  6. PHP创建数组的方式_5种PHP创建数组的方法

    本节内容: php数组创建实例 . 1.使用array()创建数组 array()创建数组是我们在PHP开发过程中最常用到的一种方式,准确来说array()是一种结构而不是一个函数. 复制代码 代码示 ...

  7. vue路由传参两种方式;vue路由传参query与params区别;vue路由跳转的带参与不带参,路由跳转传参方式:name 、 path;

    vue项目的路由传参常用的有两种方式:query和params 1.query传参特点:1.1可以用path也可以用name传递路径 注意name是路由页面vue文件的名称 不需要/1.2跳转页面地址 ...

  8. JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API

    一.概述 描述:数组(array)是按照一定顺序排列的一组值,每个值都拥有自己的编号,编号从0开始.整个数组用方括号来表示. 语法:var arr=[item1,item2,item3-] 1.1 注 ...

  9. js中对象合并的4种方式,数组合并的4种方法

    目录 一.对象合并 1.拓展运算符(...) 2.Object.assign() 3.递归赋值 4.jquery中的extend() 二.数组合并 1.扩展操作符 2.使用array.concat() ...

  10. vue通信的N种方式

    组件通信可以分为父子组件通信.非父子组件通信,可以是数据的传递,也可以是方法的传递,先介绍数据的相互传递,再介绍方法的相互传递. 父组件到子组件传递数据: 一.通过props,父组件可以传递动态和静态 ...

最新文章

  1. MySql分表、分库、分片和分区的区别
  2. 预备作业02 20162316刘诚昊
  3. lis最长上升子序列o(nlogn)优化
  4. PHP随机输出视频API源码,php 32行代码简单实现抖音无水印视频api,附前台页面
  5. 华为透露中国首个开源基金会将于近期正式运营!
  6. ffmpeg转码器移植VC的工程:ffmpeg for MFC
  7. Android 网络请求(OKHttp框架)
  8. rancher 权限 添加用户_Kubernetes身份认证和授权操作全攻略:访问控制之Service Account...
  9. 顺序表实验——顺序表的基本操作
  10. 从函数式编程到深入Redux应用实战-郭永峰-专题视频课程
  11. centos7 Redis多机多节点集群部署
  12. 斗图表情包爬虫(基于多线程)
  13. os I/O设备和设备控制器
  14. 键盘·由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码19)
  15. 俄方产量也将削减恐左右油价未来走势
  16. 基于STM32的“智能家居”课程设计
  17. 【招聘测评题】中的(行测)数字推理题基本逻辑总结(附例题)
  18. php 能让拆分的表格循环吗,这才是拆分表格最完美的方法
  19. Commvault+XSKY 推出基于 Object Lock 的防勒索病毒联合方案
  20. 京东金融大数据竞赛猪脸识别(9)- 识别方法之五

热门文章

  1. 机器学习入门概念--心血总结--史上最强--入门必读--回味无穷
  2. 【verbs】ibv_modify_qp()|RDMA
  3. oracle官网下载过程,Oracle 11g安装步骤
  4. 计算机组成与设计(硬件/软件接口)RISC-V版笔记
  5. 看了这篇文章,终于知道怎么区分DV、OV、EV证书了
  6. 由Yardi赞助的报告披露亚太房地产科技投资详情
  7. win10修改DVD驱动器盘符(磁盘管理无DVD驱动器)
  8. 软文写作技巧与营销的相互作用
  9. reset.css normalize.css,normalize与css reset的区别
  10. 云计算:程序员重回个人英雄时代