欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/6/17 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 数组扁平化等的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。