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]}

转载于:https://www.cnblogs.com/kyo4311/p/5176217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值