JavaScript函数式编程-高阶函数filter(一)

作者: 陈7号 | 来源:发表于2016-08-07 23:25 被阅读457次

**一. 为什么使用函数式编程 **

  1. 更少的bug
  2. 更容易理解
  3. 可以花更少的时间
  4. 代码可复用性高

二.什么是高阶函数

  • 在通常的编程语言中,函数的参数只能是基本类型或者对象引用,返回值也只是基本数据类型或对象引用。
// 大部分编程语言可以这么写一个函数
function triple(x) {
    return x * 99;
};
//但是JavaScript可以将一个匿名函数声明为一个变量
var triple = function (x) {
    return x * 99;
};

但在JavaScript中函数作为一等公民,既可以当做参数传递,也可以被当做返回值返回。所谓高阶函数就是可以把函数作为参数,或者是将函数作为返回值的函数。

三.filter(可能是最有用的高阶函数)

array1.filter(callbackfn[, thisArg])

参数介绍:对数组array1中的每个元素调用回调函数callbackfn方法,该方法会返回一个在回调函数中返回true的元素的新的集合。可选参数thisArg可以替换回调函数中的this对象.
返回值:一个包含回调函数为其返回 true 的所有值的新数组。如果回调函数为 array1 的所有元素返回 false,则新数组的长度为 0。

var animals = [
    {name: 'Fluffykins', species: 'rabbit'},
    {name: 'Caro', species: 'dog'},
    {name: 'Hamilton', species: 'dog'},
    {name: 'Harold', species: 'fish'},
    {name: 'Ursula', species: 'cat'},
    {name: 'Jimmy', species: 'fish'}
];

// 过滤掉除了species是dog的元素
// 首先使用平常经常使用的for循环来实现

var dogs = [];
for(var i = 0; i < animals.length; i++){
    if(animals[i].species === 'dog'){
        dogs.push(animals[i]);
    }
}
console.log(dogs);
// 输出如下:
// [
//  { name: 'Caro', species: 'dog' },
//  { name: 'Hamilton', species: 'dog' }
// ]

// 使用filter来重写上面的方法,如下:
var dogs = animals.filter(function(animal){
    return animal.species === 'dog';
});
console.log(dogs);
// 输出如下:
// [
//  { name: 'Caro', species: 'dog' },
//  { name: 'Hamilton', species: 'dog' }
// ]
// 将filter中的函数提取出来,如下:
var isDog = function(animal){
    return animal.species === 'dog';
};
var dogs = animals.filter(isDog);
console.log(dogs);
// 输出如下:
// [
//  { name: 'Caro', species: 'dog' },
//  { name: 'Hamilton', species: 'dog' }
// ]

经过几次重写,得到的函数看起来更加简单易懂,符合开头写的那些特点


在前端摸爬滚打中,欢迎指正

相关文章

  • Javascript学习笔记-underscore

    JavaScript是函数式编程语言,支持高阶函数和闭包。你会发现Array有map()和filter()方法,而...

  • Swift - 高阶函数map、flatMap、filter、r

    Swift 提供了如下几个高阶函数:map、flatMap、filter、reduce。使用高阶函数进行函数式编程...

  • 数组的高级操作

    Swift提供了如下几个高阶函数:map、flatMap、filter、reduce。使用高阶函数进行函数式编程不...

  • 廖雪峰python练习题

    函数式编程之高阶函数 map 用map匹配各函数对应参数 filter 利用filter特性,输出一个函数,利用此...

  • JavaScript函数式编程-高阶函数filter(一)

    **一. 为什么使用函数式编程 ** 更少的bug 更容易理解 可以花更少的时间 代码可复用性高 二.什么是高阶函...

  • C#高阶函数介绍

    导语 一般常用的高阶函数函数有Map,Filter,Fold,Flatten,FlatMap。C#的函数式编程一般...

  • 【五十二】 underscore

    前面我们已经讲过了,JavaScript是函数式编程语言,支持高阶函数和闭包。函数式编程非常强大,可以写出非常简洁...

  • 高阶函数(一)reduce的理解和使用

    要学习函数式编程,首先得学会使用高阶函数,javascript的函数的参数可以是另一个函数,这种函数被称为高阶函数...

  • Python高阶函数总结

    一、高阶函数 把函数作为参数传入 ,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽...

  • JavaScript高阶函数(filter/sort)

    JavaScript高阶函数(filter/sort) filter() filter() 方法创建一个新数组, ...

网友评论

    本文标题:JavaScript函数式编程-高阶函数filter(一)

    本文链接:https://www.haomeiwen.com/subject/qqblsttx.html