lodash 中文学习拾零之 Map/Reduce篇

作者:Soaring_Tiger 转载请注明出处 http://blog.csdn.net/Soaring_Tiger

前情提要1 : lodash中文学习拾零之Array篇
前情提要2:lodash 中文学习拾零之 Chain篇
前情提要3:lodash 中文学习拾零之 Collection篇
前情提要4:lodash 中文学习拾零之 Object篇
前情提要5: lodash 中文学习拾零之 Function篇

6、用lodash进行数据的Map/Reduce

我们在编程过程中,大量遇到的工作是数据转换,前面几篇文章提到了lodash在数据转换中的作用,本篇将围绕Map/Reduce进行更深入的探索。


6.1 挑选数据 .pluck 或者 .map

前面我们已经看到了很多用_.pluck来挑选数据的例子

var collection = [
       { name: 'Virginia', age: 45 },
       { name: 'Debra', age: 34 },
       { name: 'Jerry', age: 55 },
       { name: 'Earl', age: 29 }
];

_.pluck(collection, 'age');
   // → [ 45, 34, 55, 29 ]

其实我们也可以用map来做同样的事情

var collection = [
       { name: 'Michele', age: 58 },
       { name: 'Lynda', age: 23 },
       { name: 'William', age: 35 },
       { name: 'Thomas', age: 41 }
];

_.map(collection, 'name');
   // →
   // [
   //   "Michele",
   // "Lynda",
   //   "William",
   //   "Thomas"
   // ]

看上去结果是一样的,其实.pluck就是在.map的基础上进行了封装,而且pluck只能以字符串(String)作为挑选的参数,而map的功能则更加强大 。


6.2 映射集合 Mapping collections

6.2.1 用.map包含以及屏蔽属性

别名:_.collect

.map(collection, [iteratee=_.identity], [thisArg])
第一个参数是要处理的数组,
第二个参数是迭代器,该迭代器可以是函数,可以是对象,也可以是字符串

var collection = [
       { first: '赵', last: '子龙', age: 23 },
       { first: '马', last: '超', age: 31 },
       { first: '张', last: '飞', age: 44 },
       { first: '关', last: '羽', age: 38 }
];

//用函数做迭代器
_.map(collection, function(item) {
       return _.pick(item, [ 'first', 'last' ]);
}); 

   // → 
   // [
   //   { first: '赵', last: '子龙'},
   //   { first: '马', last: '超'},
   //   { first: '张', last: '飞' },
   //   { first: '关', last: '羽' }
   // ]

//用对象做迭代器
_.map(collection,{first: '赵'});

//[true,false,false,false]

//用omit去掉指定的属性
_.map(collection, function(item) {
       return _.omit(item, 'first');
});

//[
//  {
  "last":"子龙","age":23},
//  {
  "last":"超","age":31},
//  {
  "last":"飞","age":44},
//  {
  "last":"羽","age":38}
//]

//用迭代器设置筛选条件
function invalidAge(value, key) {
    return key === 'age' && value < 40;
}

_.map(collection, function(item) {
    return _.omit(item, invalidAge);
});

//[
//  {
  "first":"赵","last":"子龙"},
//  {
  "first":"马","last":"超"},
//  {
  "first":"张","last":"飞","age":44},
//  {
  "first":"关","last":"羽"}
//]

6.2.2 执行计算

var collection = [
       { name: 'Valerie', jqueryYears: 4, cssYears: 3 },
       { name: 'Alonzo', jqueryYears: 1, cssYears: 5 },
       { name: 'Claire', jqueryYears: 3, cssYears: 1 },
       { name: 'Duane', jqueryYears: 2, cssYears: 0 }
];

//在迭代器中,给每个数组元素添加了两个经过计算得来的属性
   _.map(collection, function(item) {
   
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值