美文网首页
reduce实现filter,map 数组扁平化等

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

作者: 李贵功 | 来源:发表于2019-06-03 22:43 被阅读0次

    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) : null
            return 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))); // 5
    
    console.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 数组扁平化等

          本文链接:https://www.haomeiwen.com/subject/nrfkxctx.html