map函数接收一个函数作为参数,作为参数的函数接收三个参数值,分别是遍历数组的每一项元素,元素的索引和数组本身。这三个参数刚好和reduce函数接收的第一个函数参数的第2、3、4个参数是对应的。这是实现的核心

实现思路是,将每次遍历的元素,作为传入的函数的参数,并将函数执行的结果放入新的数组中。

reduce实现map

Array.prototype._map = function (callback) {if(typeof callback === 'function') {return this.reduce((prev,item,index,arr) => {prev.push(callback(item, index, arr))return prev}, [])} else {console.log(new Error('callback is not function'))}
}let val = [1, 5, 6]._map(item => item+ 1)
console.log(val);  // [2, 6, 7]
复制代码

实现filter的思路和实现map是一致的,只不过前者是一股脑的把执行结果全放入数组中,而filter需要做一个判断:如果filter函数传入的参数(参数是一个函数)执行后有返回值,即经过了检验,才将遍历的当前元素放入数组中,如果没有返回值,就忽略

reduce实现filter

  Array.prototype._filter = function (callback) {if(typeof callback === 'function') {return this.reduce((prev,item,index,arr) => {callback(item, index, arr) ? prev.push(item) : nullreturn prev}, [])} else {console.log(new Error('callback is not function'))}}let val = [1, 5, 6]._filter(item => item > 2)console.log(val);  // [5, 6]
复制代码

求最大值/最小值

  let arr = [1, 2, 3, 4, 5]console.log(arr.reduce((prev, cur) => Math.max(prev, cur))); // 5console.log(arr.reduce((prev, cur) => Math.min(prev, cur))); // 1
复制代码

数组去重

let arr = [1, 2, 3, 1, 1, 2, 3, 3, 4, 3, 4, 5]let result = arr.reduce((prev, item, index, arr) => {
!prev.includes(item) && prev.push(item);
return prev
}, [])
console.log(result);  //[1, 2, 3, 4, 5]复制代码

数组扁平化

let arr = [1, 2, '3js', [4, 5, [6], [7, 8, [9, 10, 11], null, 'abc'], {age: 58}, [13, 14]], '[]', null];
function f(arr) {if(Array.isArray(arr)) {return arr.reduce((prev, item) => {return Array.isArray(item) ? prev.concat(f(item)) : prev.concat(item)}, [])} else {throw new Error("arr + ' is not array'")}
}
复制代码

结果:

reduce实现filter,map 数组扁平化等相关推荐

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

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

  2. 使用reduce实现数组扁平化

    实现的目标 使用数组原生的API,reduce来实现flat,又叫数组拍平. 下面是一个数组拍平的例子: [1, [[2], 3, 4], 5] --> [1,2,3,4,5] 原生flat具有 ...

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

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

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

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

  5. JAVA数组扁平化整合_一文搞定数组扁平化(超全面的数组拉平方案及实现)

    前言 面试手写代码在大厂面试中非常常见,秋招中面试小米就手写了一道flat实现的代码题,当时通过递归方式实现了数组扁平化逻辑,但没有考虑多种实现方案及其边界条件(主要是对所涉及到高阶函数的知识点不够熟 ...

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

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

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

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

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

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

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

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

最新文章

  1. pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1)、索引不移动,移动之后无值的赋值为NaN、将原数据列与偏移后的数据列相加生成新的数据列
  2. Android消息处理:EventBus、BroadCast和Handler-优缺点比较
  3. 到底什么时候用指针或是引用
  4. Ada 程序设计语言(The Ada Programming Language)[第二集]
  5. 电子工程可以报考二建_毕业证上财务管理专业,可以报考二建吗?
  6. JS Ajax异步请求发送列表数据后面多了[]
  7. PySide: 信号、槽
  8. 使用no-gui 模式执行分布式测试
  9. java常见的定时任务
  10. 源码维护基本命令diff_patch_quilt
  11. final swfplayer安卓10/11/12上都能播放flash播放器源码
  12. 近世代数-群论基础二
  13. html点击按钮展开文字,JS 展开/收起按钮显示隐藏文字示例
  14. 使用Cytoscape 的BinGO插件绘制GO通路关系图
  15. JupyterLab 的安装与使用
  16. android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!
  17. stm32打怪升级之再见闪烁灯
  18. 图片不变形,按照等比例缩小或扩大显示
  19. 郑州73中学计算机老师,关于“郑州市中学信息技术优质课评比”的通知
  20. python 自动发微博 (微博H5接口)

热门文章

  1. BZOJ5137lg4081(广义后缀自动机,set启发式合并)
  2. Git clone命令出现fatal repository not found错误
  3. 连接MySQL的10060错误:Can't connect to MySQL server on '*.*.*.*'(10060)
  4. python3远程连接MySQL
  5. 22.调用element方法控制dom元素
  6. 第二冲刺站立会议01
  7. EmEditor编辑器正则表达式的优点
  8. 利用Python进行数据分析-07-汇总和计算描述统计
  9. oracle用户创建及权限设置
  10. php mysql 登录注销_laravel 实现用户登录注销并限制功能