• underscorejs-groupBy学习


    2.18 groupBy

    2.18.1 语法

    _.groupBy(list, iteratee, [context])

    2.18.2 说明

    把list分为多个集合,iterator为分组的依据,返回值为Object

    • list可以是数组、对象、字符串或arguments等
    • iteratee为分组的依据.
    • iterator的参数(value, key, list)
    • iterator如果是function需要返回值
    • context可以改变iterator内部的this

    2.18.3 代码示例

    示例一:list可以是数组、对象、字符串或arguments等

    var parity;
    var iteratee = function(value, key, list){
        return value % 2; // value % 2的结果是0或是1,所以key就是0或是1
        //return value % 2 === 0; //这样子就变成了true或false
    };
    
    //list为数组
    parity = _.groupBy([1, 2, 3], iteratee);
    console.log(parity); //=> {0:[2], 1:[1, 3]}
    
    //list为对象
    parity = _.groupBy({a:1, b:2, c:3}, iteratee);
    console.log(parity); //=> {0:[2], 1:[1, 3]}
    
    //list为字符串
    parity = _.groupBy('123', iteratee);
    console.log(parity); //=> {0:[2], 1:[1, 3]}
    
    //list为arguments
    (function(){
        parity = _.groupBy(arguments, iteratee);
        console.log(parity); //=> {0:[2], 1:[1, 3]}
    }(1, 2, 3));
    

    示例二:iteratee可以全局的方法

    var parity;
    
    //iteratee可以是全局的方法
    parity = _.groupBy([1, 1.4, 1.6, 1.9], Math.floor);
    console.log(parity); //=> {1 : [1, 1.4, 1.6, 1.9]}
    
    parity = _.groupBy([1, 1.4, 1.6, 1.9], Math.ceil);
    console.log(parity); //=> {1 : [1], 2: [1.4, 1.6, 1.9]}
    

    示例三:iteratee可以是list内元素的属性

    var parity = _.groupBy(['a', 'b', 'cc'], 'length');
    console.log(parity); //=> {1:['a', 'b'], 2:['c']}
    

    示例四:iteratee可以是list内,元素的key

    这种情况其实是用的最多的。

    var array = [{
        "type": "stream",
        "price": "3.99",
        "id": "13nee"
    }, {
        "type": "stream",
        "price": "2.99",
        "id": "8ejwj"
    }, {
        "type": "buy",
        "price": "3.99".
        "id": "9akwk"
    }];
    
    var parity = _.groupBy(array, 'type');
    console.log(parity); 
    //=>
    // {
    //     stream: [{
    //         "type": "stream",
    //         "price": "3.99",
    //         "id": "13nee"
    //     }, {
    //         "type": "stream",
    //         "price": "2.99",
    //         "id": "8ejwj"
    //     }],
    //     buy: [{
    //         "type": "buy",
    //         "price": "3.99".
    //         "id": "9akwk"
    //     }]
    // }
    

    示例五:iteratee的参数

    _.groupBy('abc', function(v, i, l){
        console.log(v, i, l);
        //=> a 0 abc
        //=> b 1 abc
        //=> c 2 abc
        return v;
    });
    

    示例六:context可以改变iterator内部的this(坑)

    _.groupBy('1', function(v, i, l){
        console.log(this);//=> Object {txt: "moe"}
    }, {txt : 'moe'});
    
    
    _.groupBy('1', function(v, i, l){
        console.log(this ===1 ); //true or false?
    }, 1);
    

    2.18.4 list的特殊情况

    console.log(_.groupBy(null)); //=> Object {}
    console.log(_.groupBy(undefined)); //=> Object {}
    console.log(_.groupBy(NaN)); //=> Object {}
    console.log(_.groupBy(true)); //=> Object {}
    console.log(_.groupBy(false)); //=> Object {}
    

    2.18.5 将下列数组,按是否数字分类

    var arr = [1, '1', '2', 2, '3', '3'];
    
    var parity = (function(arr){
        //写下你的代码
    }(arr));
    
    console.log(parity);
    //=> {false:['1', '2', '3', '3'], true: [1, 2]}
    
  • 相关阅读:
    SpringBoot08-缓存
    Spring注解-自动装配(三)
    Spring注解-生命周期与属性赋值(二)
    Spring注解-组件注册(一)
    剖析SpringMVC流程与整合(八)
    SpringMVC视图解析与配置(六)
    SpringMVC的其他功能(七)
    简单了解SpringMVC(五)
    Java动态代理
    Spring事务(四)
  • 原文地址:https://www.cnblogs.com/kyo4311/p/5176217.html
Copyright © 2020-2023  润新知