zoukankan      html  css  js  c++  java
  • underscorejs-filter学习

    2.6 filter

    2.6.1 语法:

    _.filter(list, predicate, [context])

    2.6.2 说明:

    对list集合的每个成员依次进行匹配(根据predicate迭代函数检测),返回匹配成功的集合

    • list可以为数组,对象,字符串和arguments
    • predicate会传第三个参数value, key, list(参数名可自定义)
    • predicate函数需要返回值
    • context可以改变predicate函数内部的this

    2.6.3 代码示例:

    示例一:filter对数组,对象,字符串,arguments进行操作并返回匹配成功的数据

    var result;
    
    // 操作数组
    result = _.filter([1, 2, 3], function (value) {
        return value % 2 === 1;
    });
    console.log(result) //=> [1, 3]
    
    // 操作对象
    result = _.filter({ one: '一', two: '二', three: '三', num: 123, bool: false }, function (value) {
        return typeof value === "string";
    });
    console.log(result) //=> ["一", "二", "三"]
    
    // 操作复杂的对象
    var obj = {
        levelA: {
            level0: 'level0',
            level1: 'level1'
        },
        levelB: '一',
        levelC: 1,
        levelD: {
            level3: 'level3'
        }
    }
    result = _.filter(obj, function (value) {
        return typeof value === "object";
    });
    console.log(result) //=> [{level0: "level0", level1: "level1", {level3: 'level3'}}]
    
    // 操作字符串(此处将字符拆分为数组)
    result = _.filter('123', function (value) {
        return value === '2' || value === '3';
    });
    console.log(result) //=> ["2", "3"]
    
    //操作arguments
    function abc() {
        result = _.filter(arguments, function (value) {
            return value % 2 === 1;
        });
        console.log(result); //=> [1, 3]
    }
    abc(1, 2, 3);
    

    示例二:predicate函数传递的参数(函数内部需要return返回值,否则返回[])

    var result;
    
    //数组的情况
    result = _.filter([1, 2, 3], function (value, key, list) {
        console.log(value, key, list);
        //=> 1 0 [1, 2, 3]
        //=> 2 1 [1, 2, 3]
        //=> 3 2 [1, 2, 3]
    });
    console.log(result) //=> []
    
    //对象的情况
    result = _.filter({one: '一', two: '二', three: '三'}, function(value, key, list){
        console.log(value, key, list);
        //=> 一 one Object {one: "一", two: "二", three: "三"}
        //=> 二 two Object {one: "一", two: "二", three: "三"}
        //=> 三 three Object {one: "一", two: "二", three: "三"}
    });
    console.log(result) //=> []
    

    示例三:context可以改变predicate内部的this

    var result;
    
    // 数组的情况
    result = _.filter([1, 2, 3], function (value, key, list) {
        console.log(this); //=> [1, 2, 3] this是数组
    }, [1, 2, 3]);
    
    // 对象的情况
    result = _.filter([1, 2, 3], function (value, key, list) {
        console.log(this); //=> Object {no: 10} this是对象
    }, { "no": 10 });
    
    // 字符串的情况
    result = _.filter([1, 2, 3], function (value, key, list) {
        console.log(this); //=> String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123"}
                           //   this是将字符串拆分后的对象
    }, "123");
    

    2.6.4 _.select的功能和_.filter是一样的

    var result = _.filter([1, 2, 3], function (value, key, list) {
        return value % 2 === 1;
    });
    console.log(result) //=> [1, 3]
    

    2.6.5 特殊情况

    示例一:list的特殊情况

    //例如:null,undefined,0,true,this等;
    var result = _.filter(null, function (value, key, list) {
        return true;
    });
    console.log(result) //=> []
    

    示例二:predicate函数的this为window全局对象的情况

    // 例如:null,undefined,window,this等
    var result = _.filter([1, 2, 3], function (value, key, list) {
        console.log(this); //=> this是window全局对象
    }, null);
    

    2.6.6 list参数可为真假值?

    var  result = _.filter([1, true, '1', 0, undefined, null]);
    console.log(result) //=> [1, true, "1"]
    

    2.6.7 predicate还有其他写法?

    示例一:predicate参数为空的时候

    var  result = _.filter({x: 1, y: 2});
    console.log(result) //=> [1, 2]
    

    示例二:predicate参数为一个字符的时候

    var  result = _.filter([{x: 1}, {y: 2}], 'x');
    console.log(result) //=> [{x: 1}]
    

    示例三:predicate参数为对象的时候

    var obj = [
        {x: 1, y: 2},
        {x: 1},
        {y: 2, z: 3}
    ]
    var  result = _.filter(obj, {x: 1});
    console.log(result) //=> [{x: 1, y: 2},{x: 1}]
    
  • 相关阅读:
    MySQL系列(二)
    MySQL系列(一)
    RabbitMQ的安装部署
    RabbitMQ原理介绍
    消息中间件metaq
    消息中间件之zookper安装部署
    ZooKeeper基本原理
    消息中间件剖析
    了解Node.js
    windows下使用Git
  • 原文地址:https://www.cnblogs.com/kyo4311/p/5159703.html
Copyright © 2011-2022 走看看