资讯专栏INFORMATION COLUMN

javascript reduce详解及应用

Cruise_Chan / 538人阅读

摘要:循环数组每一项数组下标当前调用数组本身可选初始值,作为回调函数第一个参数的默认值,也是每次回调的返回值,见代码首页问题转化为数组首页问题转化后效果这个栗子来自配置路由时遇到的,当时也是优化了好几个版本。

reduce

callback(一个在数组中每一项上调用的函数,接受四个参数:)
previousValue(上一次调用回调函数时的返回值,或者初始值)
currentValue(当前正在处理的数组元素)
currentIndex(当前正在处理的数组元素下标)
array(调用reduce()方法的数组)

initialValue(可选的初始值。作为第一次调用回调函数时传给previousValue的值)

概念一搜一大把,我们聊点我遇到的和理解的,见代码

callback
//reduce作为累加器
        let arr = [1, 2, 3, 4, 5]
        let sum = arr.reduce((init, item, i, self) => {
            console.log(`init---${init}, item---${item}, i---${i}, self---${self}`)
            return init + item
        })
        console.log(sum) //15

分别看一下回调参数 见下图

init默认为数组第一项,一次累加数组项,最后返回一项。
item循环数组每一项
i数组下标
self当前调用reduce数组本身

initialValue

可选初始值,作为回调函数第一个参数的默认值,也是每次回调的返回值,见代码

       let obj = {
            "/home": {
                meta: {
                    title: "首页"
                },
                component: "@/page/home"
            },
            "/question": {
                meta: {
                    title: "问题"
                },
                component: "@/page/question"
            }
        }
        // 转化为数组
        let map = [{
            path: "/home",
            meta: {
                title: "首页"
            },
            component: "@/page/home"
        }, {
            path: "/question",
            meta: {
                title: "问题"
            },
            component: "@/page/question"
        }]

        let map1 = Object.keys(obj).reduce((arr, item) => {
            return (arr.push({
                path: item,
                ...obj[item]
            }), arr)
        }, [])
        console.log(map1)

转化后效果

这个栗子来自vue配置路由时遇到的,当时也是优化了好几个版本。

接下来详细解释一下

Object.keys(obj) //把obj转化为内容为key的数组

reduce((arr,item)=>{
})
//上边已经解释过参数了,回调后边的参数[]:返回值默认值是一个空数组

关于 
        return (arr.push({
                path: item,
                ...obj[item]
            }), arr)

其实可以写成
       arr.push({
                path: item,
                ...obj[item]
            })
        return arr

      
具体请查看:javascript逗号操作符

别急还有一个用法新鲜刚发现的。

  //需求:判断数组每一项的end和下一项的start是否是递增的,返回ture or false
        let arr = [{
            start: 1,
            end: 3
        }, {
            start: 1,
            end: 3
        }, {
            start: 4,
            end: 5
        }]

      
        function isTure(arr) {
            let status = true
            arr.reduce((pro, next) => {
                if (pro.end >= next.start) {
                    status = false
                    return false
                }
                return next
            })
            return status
        }

        console.log(isTure(arr))

这里我们巧用了 reduce的返回值,每次返回当前项,这样两个参数始终为1,2 | 2,3|3,4依次类推

[map]https://segmentfault.com/a/11...

//新加获取数组重复次数最多的字符
var arr = ["a", "s", "d", "f", "g", "r", "t", "h", "y", "t", "w", "w", "w", "w", "w", "r", "d", "s"]

        function getMaxLen(arr) {
            let str = ""
            let len = 0
            arr.reduce((map, item) => {
                map[item] ? ++map[item] : map[item] = 1
                if (map[item] > len) {
                    len = map[item]
                    str = item
                }
                return map
            }, {})
            return {
                str,
                len
            }
        }
        console.log(getMaxLen(arr))//{str: "w", len: 5}
        
        

推荐个人专栏:https://segmentfault.com/blog...

您的吐槽or点赞是我的动力!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100387.html

相关文章

  • JS进阶篇--JS数组reduce()方法详解高级技巧

    摘要:基本概念方法接收一个函数作为累加器,数组中的每个值从左到右开始缩减,最终为一个值。例进阶应用使用方法可以完成多维度的数据叠加。在该函数内部,则执行多维的叠加工作。参考的内建函数数组方法的高级技巧 基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值。 reduce 为数组中的每一个元素依次执行回调函数,不包括...

    jerryloveemily 评论0 收藏0
  • redux-saga框架使用详解Demo教程

    摘要:通过创建将所有的异步操作逻辑收集在一个地方集中处理,可以用来代替中间件。 redux-saga框架使用详解及Demo教程 前面我们讲解过redux框架和dva框架的基本使用,因为dva框架中effects模块设计到了redux-saga中的知识点,可能有的同学们会用dva框架,但是对redux-saga又不是很熟悉,今天我们就来简单的讲解下saga框架的主要API和如何配合redux框...

    Nosee 评论0 收藏0
  • dva框架使用详解Demo教程

    摘要:框架的使用详解及教程在前段时间,我们也学习讲解过框架的基本使用,但是有很多同学在交流群里给我的反馈信息说,框架理解上有难度,看了之后还是一脸懵逼不知道如何下手,很多同学就转向选择使用框架。 dva框架的使用详解及Demo教程 在前段时间,我们也学习讲解过Redux框架的基本使用,但是有很多同学在交流群里给我的反馈信息说,redux框架理解上有难度,看了之后还是一脸懵逼不知道如何下手,很...

    bergwhite 评论0 收藏0

发表评论

0条评论

Cruise_Chan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<