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

    2.11 some

    2.11.1 语法:

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

    2.11.2 说明:

    对list集合的每个成员根据predicate进行真值检测,如果一个通过真值检测则返回true(匹配成功则立即返回)

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

    2.11.3 代码示例:

    示例一:some对数组,对象,字符串,arguments与predicate进行真值检,如果包含一个通过真值检测则返回true

    var result;
    // 操作数组
    result = _.some([0, 1, 3], function (value) {
        return value % 2 === 0;
    });
    console.log(result) //=> true
    
    // 操作对象
    result = _.some({ one: 1, two: 2, three: 3, four: false }, function (value) {
        return typeof value === 'string';
    });
    console.log(result); //=> false
    
    // 操作字符串(此处将字符拆分为数组)
    result = _.some('123', function (value) {
        return value !== '2' ? true : false;
    });
    console.log(result) //=> true
    
    //操作arguments
    function abc() {
        result = _.some(arguments, function (value) {
            return value % 2 === 0;
        });
        console.log(result); //=> false
    }
    abc(1, 3, 5);
    

    示例二:predicate会传递三个参数(value, key, list);函数内部需要return返回,否则直接返回false;

    // predicate为不传值(且list集合属性值包含真值返回true,否则返回false)
    var result;
    result = _.some([1, 2, 3]);
    console.log(result); //=> true
    
    //数组的情况
    result = _.some([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]
        return false;
    });
    
    //对象的情况
    result = _.some({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: "三"}
        return false;
    });
    

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

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

    2.11.4 _.some的功能和_.any是一样的

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

    2.11.5 特殊情况

    示例一:list的特殊情况(数组,object对象,字符串之外的值),会返回什么呢?

    var result = _.some(null);
    console.log(result) //=> false 直接返回不做任何操作
    

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

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

    2.11.6 predicate还有其他写法?

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

    var result = _.every([{ x: 1 }, { y: 1 }], 'x');
    console.log(result) //=> true 会检测key是否包含x
    

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

    var obj = [
        { x: 1, y: 2 },
        { x: 1 },
        { y: 1, z: 3 }
    ]
    var result = _.every(obj, { x: 1 });
    console.log(result) //=> true
    

    示例三:predicate为现有的方法(这里只列出部分例子)

    // _.identity方法
    var result = _.some([false, 0], _.identity);
    console.log(result) //=> false
    
    // _.isNumber方法
    var result = _.some([1, 2, 3], _.isNumber);
    console.log(result) //=> true
    
    // _.isObject方法
    var obj = [
        { x: 1, y: 2 },
        { x: 1 },
        { x: 1, z: 3 }
    ]
    var result = _.some(obj, _.isObject);
    console.log(result) //=> true
    

    gitbook地址:https://www.gitbook.com/book/niec-fe/underscorejs/details

  • 相关阅读:
    [bzoj1500][luogu2042][cogs339][codevs1758]维修数列(维护数列)
    无旋treap的简单思想以及模板
    [hdu2036]改革春风吹满地
    (treap)[bzoj3224][洛谷3369][cogs1829]Tyvj 1728 普通平衡树
    [bzoj3875][Ahoi2014]骑士游戏
    [bzoj1433][ZJOI2009]假期的宿舍
    <struct、union、enum>差异
    LeetCode(50) Pow(x,n)
    LeetCode(49)Group Anagrams
    LeetCode(48)Rotate Image
  • 原文地址:https://www.cnblogs.com/kyo4311/p/5172029.html
Copyright © 2011-2022 走看看