ES6 中的reduce()

语法:array.reduce(callback, [initialValue])
reduce()方法接收callback函数,
function callback(preValue, curValue, index, array)

  • preValue: 上一次调用回调返回的值,活着初始值(initialValue

  • curValue: 数组中当前被处理的数组项

  • index: 当前数组项在数组中的索引值

  • array: 调用reduce()方法的数组

  • initialValue: 第一次调用callback函数时的preValue

原理

Array.prototype.myReduce = function(callback, prev){
  for(let i = 0; I < this.length; i ++){
    // 如果没有传默认值,即当第一次循环,prev为undefined的时候,初始值是数组第一项,索引是1
    if(typeof prev === 'undefined'){
        prev = callback(this[i], this[i + 1], i, this)
        ++ i
    } else {
        prev = callback(prev, this[i],  i, this)
    }
  }
  return prev
}
let arr = [1, 2, 3, 4, 5].myReduce((prev, cur, index, array) => {
  return prev + cur
})
console.log(arr)      // 15
应用:

1、数组求和

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reduce((prev, cur, index, ary) => {
  return prev + cur
})
arr    // 55

2、数组求阶乘

  let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reduce((prev, cur, index, ary) => {
  return prev * cur
})
arr     // 3628800

3、展平数组(二维数组变一维数组)

let flat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]].reduce((prev, cur, index, array) => {
  return [...prev, ...cur]
})
flat    // [1, 2, 3, 4, 5, 6, 7, 8]

4、 数组去重

  let arr = [1, 2, 3, 3, 4, 4, 4, 5, 5, 6, 4, 6, 4, 3, 2].sort().reduce((prev, cur, index, array) => {
    if(prev.length === 0 || prev[prev.length -1] !== cur){
      prev.push(cur)
    }
    return prev
}, [])
arr         // [ 1, 2, 3, 4, 5, 6 ]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • The JavaScriptArrayobject is a global object thatis used ...
    skycolor阅读 585评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,315评论 0 3
  • 定义数组 用字面量创建 用new Array()创建 或 Array.indexOf 返回在数组中可以找到给定元素...
    zqyadam阅读 1,028评论 0 48
  • 我是辅助, 你是ADC, 你强,我带着引燃, 随你闯荡天涯。 你弱,我带着虚弱, 陪你猥琐发育。 我可以闪现, 替...
    樊小篱阅读 391评论 4 7