• JavaScrip中 Array.reduce()


    数组的方法 reduce()

    reduce方法在数组的每一项元素上都会执行回调函数。

    语法array.reduce( callBack [ , init]  )

    // 语法
    arrary.reduce(function(pre, val, ind, arr){ // .... }, init)

    回调函数的参数有:初始值/上一次回调返回值、当前元素、当前索引、原数组。

    callBack 函数:callBack(pre, val, ind, arr)。

      pre:初始值init  或 上一次回调函数的返回值。提供初始值init,作为首次回调函数的第一个参数pre的值使用。

      val: 当前元素。

      ind: 当前索引。

      arr: 原数组。

    init初始值:作为首次回调函数的第一个参数的pre值使用。

    1.求和

    const array = [1, 2, 3, 4, 5]
    const total
    = array.reduce((pre, val) => pre + val, 0)
    console.log(total)
    // 15
    const array = [
        { num: 10 },
        { num: 20 },
        { num: 30 }
    ]
    const total = array.reduce((pre, val) => pre + val.num, 0)
    console.log(total) // 60

    2.最大值

       const array = [1, 2, 3, 8, 5, 2, 4]
       const max = array.reduce((pre, val) => Math.max(pre, val))
    // const max = array.reduce((pre, val) => pre > val ? pre : val)
    // const max = arrary.reduce(pre, val) => Math.max(pre, val), array[0]) console.log(max )
    // 8
       const array = [
           { num: 120 },
           { num: 10 },
           { num: 200 },
           { num: 30 }
       ]
       const max= array.reduce((pre, val) => Math.max(pre, val.num), array[0].num)
    // const
    max= array.reduce((pre, val) => Math.max(typeof pre === 'number' ? pre : pre.num, val.num))
    console.log(max) // 200

    3.其他用法

    const array = [
          { age: 18, name: '花花' },
          { age: 19, name: '韩梅' },
          { age: 16, name: '小白' },
          { age: 17, name: '框猪' }
    ]
    const res = array.reduce((pre, val, ind, arr) => {
          let s = ''
          let e = ''
          switch (ind) {
            case 0:
              s = ''
              break
            case arr.length - 1:
              s = '和'
              e = '。'
              break
            default:
              s = '、'
          }
          return pre + `${s}${val.name}${e}`
    }, '参与者有')
    console.log(res) // 参与者有花花、韩梅、小白和框猪。
    const array = [
          { age: 18, name: '花花', type: 1 },
          { age: 19, name: '韩梅', type: 3 },
          { age: 16, name: '小白', type: 2 },
          { age: 17, name: '框猪', type: 1 },
          { age: 17, name: '懵萌', type: 1 },
          { age: 20, name: '大卫', type: 3 }
    ]
    const Obj = array.reduce((pre, val) => {
          pre[val.type] ? pre[val.type].push(val) : pre[val.type] = [val]
          return pre
    }, {})
    
    console.log(Obj)

    /*  实现数组分类
      {
        1:
    [
            { age: 18, name: '花花', type: 1 },
            { age: 17, name: '框猪', type: 1 },
            { age: 17, name: '懵萌', type: 1 }
        ],
        2: [
          { age: 16, name: '小白', type: 2 }
        ],
        3: [
          { age: 19, name: '韩梅', type: 3 },
          { age: 20, name: '大卫', type: 3 }
        ]
      }
    */ 
  • 相关阅读:
    解析Java反射java.lang.IllegalArgumentException: wrong number of arguments
    java中参数" ..."的用法和意思
    Synchronized方法锁、对象锁、类锁区别
    瀚云平台kafka简单原理
    ReflectionUtils.invokeMethod的作用
    实用———springmvc接收参数校验
    卷积神经网络CNN
    第一个TensorFlow程序
    TF从文件中读取数据
    TF基础5
  • 原文地址:https://www.cnblogs.com/zhaoxiaoying/p/14658535.html
Copyright © 2020-2023  润新知