zoukankan      html  css  js  c++  java
  • ES6中的reduce

    let arr1 = [0, 1, 2, 3, 4].reduce(function (accumulator, currentValue, currentIndex, array) {
            // accumulator 累计器
            // currentValue 当前值
            // currentIndex 当前索引
            // array 数组
            return accumulator + currentValue
          })
          // 等价于
          let arr2 = [0, 1, 2, 3, 4].reduce((prev, curr) => prev + curr)
          console.log(arr2)
    
          // 提供一个初始值作为reduce()方法的第二个参数
          let arr3 = [0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {
            return accumulator + currentValue
          }, 10)
          console.log(arr3)
    
          // 要累加对象数组中包含的值,必须提供初始值,以便各个item正确通过你的函数
          let initialValue = 0
          let sum = [{x: 1}, {x: 2}, {x: 3}].reduce(function (accumulator, currentValue) {
            return accumulator + currentValue.x
          }, initialValue)
          console.log(sum) //  6
    
          // 将二维数组转化为一维
          let flattened = [[0, 1], [2, 3], [4, 5]].reduce(
            function (a, b) {
              return a.concat(b)
            },
            []
          )
          console.log(flattened)// [0, 1, 2, 3, 4, 5]
    
          // 计算数组中每个元素出现的次数
          let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
          let countedNames = names.reduce(function (allNames, name) {
            if (name in allNames) {
              allNames[name]++
            } else {
              allNames[name] = 1
            }
            return allNames
          }, {})
          console.log(countedNames)
    
          // 按属性对object分类
          let people = [
            {name: 'Alice', age: 21},
            {name: 'Max', age: 20},
            {name: 'Jane', age: 20}
          ]
    
          function groupBy(objectArray, property) {
            return objectArray.reduce(function (acc, obj) {
              var key = obj[property]
              if (!acc[key]) {
                acc[key] = []
              }
              acc[key].push(obj)
              return acc
            }, {})
          }
    
          let groupedPeople = groupBy(people, 'age')
          console.log(groupedPeople)
    
          // 数组去重
          let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
          let myOrderedArray = myArray.reduce(function (accumulator, currentValue) {
            if (accumulator.indexOf(currentValue) === -1) {
              accumulator.push(currentValue)
            }
            return accumulator
          }, [])
    
          console.log(myOrderedArray)
  • 相关阅读:
    [HAOI2009] 毛毛虫
    [NOI2015]品酒大会
    SDOI2016 生成魔咒
    [POJ2406]字符串的幂
    [SPOJ705]不同的子串
    快速幂和矩阵快速幂
    对于最近的一些日常总结by520(17.10.18)
    思维训练
    趣味性的高智商(贼有意思)的题(坑)
    C++手动开O2优化
  • 原文地址:https://www.cnblogs.com/ronle/p/11742875.html
Copyright © 2011-2022 走看看