实现的目标

使用数组原生的API,reduce来实现flat,又叫数组拍平。

下面是一个数组拍平的例子:

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

原生flat具有的特点

原生flat每调用一次,数组的维度减少1,多维数组在这种情况时可能处理起来很麻烦,无法一次性的边多维数组变为一维数组,比如下面这个例子。

const arr = [1, [[2], 3, 4], 5];
console.log(arr.flat());   // [1,[2],3,4,5]

使用reduce函数实现数组扁平化

使用reduce函数实现数组的扁平化主要用到下面的几个API。

  1. reduce
  2. concat

reduce重点是理解其回调函数的两个参数,主要是什么意思,分别是pre,cur。其中pre代表的是之前的累积和,cur代表的是当前的元素。

concat重点是理解谁调用concat,就把后面的部分进行结构赋值,然后加入到调用concat的部分,请看下面的例子:

// 测试concat
const test = [666];
test.concat([1,2,3])  // [666,1,2,3]

实现代码

// 使用reduce实现
const myFlat = (arr) => {return arr.reduce((pre,cur) => {return pre.concat(Array.isArray(cur) ? myFlat(cur) : cur);},[])
}
const arr = [1, [[2], 3, 4], 5];
console.log(myFlat(arr));  // [1,2,3,4,5]

使用reduce实现数组扁平化相关推荐

  1. reduce实现filter,map 数组扁平化等

    map函数接收一个函数作为参数,作为参数的函数接收三个参数值,分别是遍历数组的每一项元素,元素的索引和数组本身.这三个参数刚好和reduce函数接收的第一个函数参数的第2.3.4个参数是对应的.这是实 ...

  2. JS数组扁平化flat,reduce等六种方式实现

    数组扁平化:将数组中嵌套的数组拉平变成一维数组. 方法1:reduce,遍历数组每一项,若值为数组则递归遍历,否则concat 代码如下 let arr = [1, [2, 3, [4, 5], 6] ...

  3. 数组去重与数组扁平化

    一.数组去重(1)indexOf() function only(arr){var res=[];arr.forEach(function(item){if(res.indexOf(item)==-1 ...

  4. JAVA数组扁平化整合_数组扁平化的几种处理放法

    清明节,这几天放假闲来无事,好好研究一下基础知识,今天看看数组扁平化该怎么处理: 先来看数组扁平化是什么: var arr = [1,2,3,4,[5,6,[7,8]],true] => [1, ...

  5. JS----JavaScript中数组扁平化

    扁平化 一. 什么是数组扁平化? 数组扁平化就是将一个多层嵌套的数组 (Arrary) 转化为只有一层. 数组扁平化概念:数组扁平化是指将一个多维数组变为一维数组 // 多层嵌套 [1, 2, [3, ...

  6. 【算法图解|2】JavaScript 如何实现数组扁平化

    数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化, var arr = [1, [2, ...

  7. es6删除数组某一项_精学手撕系列——数组扁平化

    参考文章:面试官连环追问:数组拍平(扁平化) flat 方法实现 编者荐语: 在前端面试中,手写flat是非常基础的面试题,通常出现在笔试或者第一轮面试中,主要考察面试者基本的手写代码能力和JavaS ...

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

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

  9. JavaScript数组常用方法解析和深层次js数组扁平化

    前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...

最新文章

  1. 刚刚,华为重磅宣布:无人驾驶正式上高速!
  2. 笔记JavaScript基本概念
  3. 润乾转html居中,[分享]润乾报表内置的jsp编辑器
  4. 关于网络线与电话线共用之体会
  5. SSL与OpenSSL关系介绍
  6. 宏BOOST_TEST_ALL_WITH的用法实例
  7. C语言2011计算机二级c语言考点:c语言的基础知识
  8. windows .bat获取XCOPY返回值
  9. 【Ynoi2011】成都七中【树论】【点分树】【离线】【树状数组】
  10. tomcat与apache的面试题
  11. html ajax请求jsp,JSP+jquery使用ajax方式调用json的实现方法
  12. oracle10数据库链接失败,oracle 10g Enterprise Manager 无法连接到数据库实例分析
  13. 基于WF4的新平台-流程模式-(6)动态串行
  14. 机器学习 —— 神经网络(matlab)
  15. 北大成立人工智能研究院,中科院院士黄如担任院长
  16. wordpress提示“Error establishing a database connection“的解决办法
  17. hdu 5208 Where is Bob (数位dp,k进制树合并)
  18. 【LeetCode-769. medium】最多能完成排序的块
  19. CAD填充无法修剪的解决办法
  20. 【第4章】网络安全体系与网络安全模型(信息安全工程师)

热门文章

  1. 科研伦理与学术规范 期末考试2(40题)
  2. 第十八届全国大学生智能汽车竞赛 智能视觉组比赛细则
  3. 微信小程序怎么开发自己的小程序?
  4. 新手怎么做一个小程序?
  5. 重读《纳瓦尔宝典》精彩语录及感悟篇(一)
  6. un-app部署h5项目到普通云服务器--域名解析--OOS对象存储
  7. 传奇单机版就是自己在家里架设一个
  8. python语法基础#1
  9. PM4PY - BPMN support
  10. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题