reduce实现filter,map 数组扁平化等
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 数组扁平化等相关推荐
- JS数组扁平化flat,reduce等六种方式实现
数组扁平化:将数组中嵌套的数组拉平变成一维数组. 方法1:reduce,遍历数组每一项,若值为数组则递归遍历,否则concat 代码如下 let arr = [1, [2, 3, [4, 5], 6] ...
- 使用reduce实现数组扁平化
实现的目标 使用数组原生的API,reduce来实现flat,又叫数组拍平. 下面是一个数组拍平的例子: [1, [[2], 3, 4], 5] --> [1,2,3,4,5] 原生flat具有 ...
- 数组去重与数组扁平化
一.数组去重(1)indexOf() function only(arr){var res=[];arr.forEach(function(item){if(res.indexOf(item)==-1 ...
- JavaScript数组常用方法解析和深层次js数组扁平化
前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...
- JAVA数组扁平化整合_一文搞定数组扁平化(超全面的数组拉平方案及实现)
前言 面试手写代码在大厂面试中非常常见,秋招中面试小米就手写了一道flat实现的代码题,当时通过递归方式实现了数组扁平化逻辑,但没有考虑多种实现方案及其边界条件(主要是对所涉及到高阶函数的知识点不够熟 ...
- JAVA数组扁平化整合_数组扁平化的几种处理放法
清明节,这几天放假闲来无事,好好研究一下基础知识,今天看看数组扁平化该怎么处理: 先来看数组扁平化是什么: var arr = [1,2,3,4,[5,6,[7,8]],true] => [1, ...
- JS----JavaScript中数组扁平化
扁平化 一. 什么是数组扁平化? 数组扁平化就是将一个多层嵌套的数组 (Arrary) 转化为只有一层. 数组扁平化概念:数组扁平化是指将一个多维数组变为一维数组 // 多层嵌套 [1, 2, [3, ...
- 【算法图解|2】JavaScript 如何实现数组扁平化
数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化, var arr = [1, [2, ...
- es6删除数组某一项_精学手撕系列——数组扁平化
参考文章:面试官连环追问:数组拍平(扁平化) flat 方法实现 编者荐语: 在前端面试中,手写flat是非常基础的面试题,通常出现在笔试或者第一轮面试中,主要考察面试者基本的手写代码能力和JavaS ...
最新文章
- pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1)、索引不移动,移动之后无值的赋值为NaN、将原数据列与偏移后的数据列相加生成新的数据列
- Android消息处理:EventBus、BroadCast和Handler-优缺点比较
- 到底什么时候用指针或是引用
- Ada 程序设计语言(The Ada Programming Language)[第二集]
- 电子工程可以报考二建_毕业证上财务管理专业,可以报考二建吗?
- JS Ajax异步请求发送列表数据后面多了[]
- PySide: 信号、槽
- 使用no-gui 模式执行分布式测试
- java常见的定时任务
- 源码维护基本命令diff_patch_quilt
- final swfplayer安卓10/11/12上都能播放flash播放器源码
- 近世代数-群论基础二
- html点击按钮展开文字,JS 展开/收起按钮显示隐藏文字示例
- 使用Cytoscape 的BinGO插件绘制GO通路关系图
- JupyterLab 的安装与使用
- android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!
- stm32打怪升级之再见闪烁灯
- 图片不变形,按照等比例缩小或扩大显示
- 郑州73中学计算机老师,关于“郑州市中学信息技术优质课评比”的通知
- python 自动发微博 (微博H5接口)
热门文章
- BZOJ5137lg4081(广义后缀自动机,set启发式合并)
- Git clone命令出现fatal repository not found错误
- 连接MySQL的10060错误:Can't connect to MySQL server on '*.*.*.*'(10060)
- python3远程连接MySQL
- 22.调用element方法控制dom元素
- 第二冲刺站立会议01
- EmEditor编辑器正则表达式的优点
- 利用Python进行数据分析-07-汇总和计算描述统计
- oracle用户创建及权限设置
- php mysql 登录注销_laravel 实现用户登录注销并限制功能