Javascript 的高阶函数

2019-12-01  本文已影响0人  daozun

1. 定义:

2. 举例:

    const a = function() {
        console.log("我是a")
    }

    const b = function() {
        console.log("我是b")
    }

    function print(flag, a, b) {
        if(flag === 'first') {
            a();
        } else if(flag === 'second') {
            b();
        }
    }

    print('first', a, b); // 我是a

3. JS 中内置的高阶函数

3.1 map

    const message = [
        {
            name: 'kunkun',
            age: 21,
            hobby: `sing, jump, rap`
        },
        {
            name: 'xiaochuan',
            age: 29,
            identity: 'Emperor of Japan'
        }
    ]

我们想给数组内每个对象添加一个新属性:relationship, 如果不用 map 一般我们会采用 for 循环,但是我们用 map 函数的话代码看起来开会更简洁而且代码量也会更少,如:

    const newMessage = message.map(item => {
        item.relationship = 'brothers';
        return item;
    })

打印结果如下:


map.png

3.2 filter

    const newMessage = message.filter(item => {
        return item.age > 21;
    })

打印结果如下:


filter.png

3.3 find

    const newMessage = message.find(item => {
        return item.age > 21;
    })

打印结果如下:


find.png

find 和 filter 的不同:

1. filter 返回的是 数组 ,而 find 返回的是 对象 ;
2. filter 返回 所有 满足条件的数据,而 find 只返回 第一个 查找到的满足条件的数据, 可能这也是它们两个一个返回数组一个返回对象的原因吧。

3.4 some

    function checkAge() {
        return message.some(val => {
            return val.age > 21
        })
    }

打印结果为 true,因为 message 数组里面有一项 age 大于 21。

3.5 every

    function checkAge() {
        return message.every(val => {
            return val.age > 21
        })
    }

打印结果为 false,因为 message 数组里面有一项 age 等于 21。

3.6 reduce

reducer 函数接收4个参数:

Accumulator (acc) (累计器)
Current Value (cur) (当前值)
Current Index (idx) (当前索引)
Source Array (src) (源数组)
您的 reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。

举例如下:

    function addAge() {
        return message.reduce((accumulator, currentValue) => {
            return accumulator + currentValue.age
        }, 0)
    };

打印结果为:50。

上一篇 下一篇

猜你喜欢

热点阅读