2.2 map

2.2.1 语法:

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

2.2.2 说明:

对集合的每个成员依次进行某种操作,将返回的值依次存入一个新的数组。接收3个参数。list可理解为数据源iteratee迭代器可理解为回调方法;context执行上下文。

  • list可以操作数组,对象,字符串和arguments
  • iteratee 会传第三个参数(element, index, list)或(value, key, list)
  • iteratee里面需要返回值。
  • context可以改变iteratee内部的this

2.2.3 代码示例:

示例一:map对数组、对象、字符串和arguments进行操作并返回数组。

var result;

//操作数组
result = _.map([1, 2, 3], function (element, index, list) {
return element + 1;
});
console.log(result) //=> [2, 3, 4] //操作对象
result = _.map({one: '一', two: '二', three: '三'}, function(value, key, list){
return value + 1;
});
console.log(result) //=> ["一1", "二1", "三1"] //操作字符串
result = _.map('123', function(element, index, list){
return element + 1;
});
console.log(result) //=> ["11", "21", "31"] //操作arguments
function abc(){
result = _.map(arguments, function(element, index, list){
return element + 1;
});
console.log(result); //=> [2, 3, 4]
}
abc(1, 2, 3);

示例二:iteratee传递的参数

var result;

//数组的情况
result = _.map([1, 2, 3], function (element, index, list) {
console.log(element, index, list);
//=> 1 0 [1, 2, 3]
//=> 2 1 [1, 2, 3]
//=> 3 2 [1, 2, 3]
}); //对象的情况
result = _.map({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: "三"}
});

示例三:iteratee内部需要有return值

var arr1 = _.map([1, 2, 3], function (element, index, list) {
element + 1;
}); var arr2 = _.map([1, 2, 3], function (element, index, list) {
return element + 1;
});
console.log(arr1); //=> [undefined, undefined, undefined]
console.log(arr2); //=> [2, 3, 4]

示例四:context可以改变iteratee内部的this

var result = _.map([1, 2, 3], function (element, index, list) {
return element + this.no; //this为{no : 10}
}, {no : 10}); console.log(result);//=> [11, 12, 13]

示例五:map方法执行后,list不变,返回新数组。

var list = [1, 2, 3];

var result = _.map(list,  function(element, index, list){
return element + 1;
}); console.log(list); //=> [1, 2, 3]
console.log(result); //=> [2, 3, 4]

2.1.4 _.collect的功能和_.map是一样的

var result = _.collect([1, 2, 3],  function(element, index, list){
return element + 1;
});
console.log(result); //=> [2, 3, 4]

2.1.5 操作非集合,返回空数据

var arr1 = _.map(null, function (element, index, list) {
console.log(element); //不执行
}); var arr2 = _.map(undefined, function (element, index, list) {
console.log(element); //不执行
}); var arr3 = _.map(123, function (element, index, list) {
console.log(element); //不执行
}); var arr4 = _.map(new Date(), function (element, index, list) {
console.log(element); //不执行
});
console.log(arr1); //=> []
console.log(arr2); //=> []
console.log(arr3); //=> []
console.log(arr4); //=> []

2.1.6 iteratee还可以是全局的方法

var result = _.map([1, -2, -3], Math.abs);
console.log(result); //=> [1, 2, 3]

2.1.7 iteratee里面用console.log需要bind(坑)

var result = _.map([1, -2, -3], console.log.bind(console));
//=> 1 0 [1, -2, -3]
//=> -2 1 [1, -2, -3]
//=> -3 2 [1, -2, -3]

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

underscorejs-map学习的更多相关文章

  1. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

  2. 不学就吃亏的underscorejs类库学习示例 ——(集合篇)

    underscorejs是一个很不错的类库,我的很多项目都引用了这个类库,的确可以带来很多方便. 记得我当初学的时候,看underscorejs的api是看的一知半解的,甚至不明白api里的conte ...

  3. Java数据结构之Map学习总结

    前言: 前面学习总结了List的使用及效率对比,今天总结学习一下键值映射关系Map,顺便学习一下Android中使用Map需要注意哪些,以及谷歌官方针对Android对Map做了哪些优化. 先了解下M ...

  4. 集合框架之Map学习

    Map接口的实现类有HashTable.HashMap.TreeMap等,文章学习整理了“ Map和HashMap的使用方法”. /** * Map和HashMap的使用方法 */public sta ...

  5. Java_lambda表达式之"stream流学习,Map学习,collect学习,Conllectors工具类学习"

    Lambda表达式学习 对List<Integer> userIdList = UserList.stream().map(User::getUserId).collect(Collect ...

  6. map学习笔记

    collection是单列集合,map是双列集合.其中包含<k,v>键值对,注意:键具有唯一性,而值不唯一. 在此列举三个读取方式:keyset,valueset,及entryset. k ...

  7. Map学习

    1.Query Operations(查询操作) int size();boolean isEmpty(); boolean containsKey(Object key);boolean conta ...

  8. STL之map学习实例

    ``` #include<iostream> #include<algorithm> #include<vector> #include<map> #i ...

  9. Python map学习笔记

    map是一个高阶用法,字面意义是映射,它的作用就是把一个数据结构映射成另外一种数据结构. map用法比较绕,最好是对基础数据结构很熟悉了再使用,比如列表,字典,序列化这些. map的基本语法如下: m ...

  10. golang map学习

    当对map只声明时,由于map为引用类型,所以默认值为nil,但对nil map 而言,支持read ,但不支持write 当执行write操作时, 会抛出panic异常; 代码如下: func Te ...

随机推荐

  1. 2015第40周二Node学习

    node历史 今天看cnode开源项目用了io.js,在查这个项目时发现这篇文章node历史,node.js和io.js关系谈到Node.js的由来,不可避免要聊到它的创始人Ryan Dahl.在20 ...

  2. max Sum(简单动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 / 给组测试数据 1 7 2 3 -4 -5 6 7 8 一个关键问题 : 什么时候将开始位置重新赋值 即 ...

  3. lightoj 1291 无向图边双联通+缩点统计叶节点

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1291 #include<cstdio> #include<cstri ...

  4. redis合库

    玩家数据全部保存在redis,对合服来绝对是个坑.因为一直都是做开发,合库这事还是第一次操作. 首先,合服要做哪些事情,当然不同的游戏肯定不一样.合服的目的是为了增加同个服务器上活跃玩家的数量.合服有 ...

  5. java mysql模板

    Java mysql的模版,很优雅.同时也兼顾了性能PreparedStatement和安全性(防SQL注入)两方面.对于比较简单的数据库操作基本满足要求. package dao; import j ...

  6. makeKeyAndVisible的作用

    [self.window makeKeyAndVisible]; 这个是便捷方法,去使被使用对象的主窗口显示到屏幕的最前端.你也可以使用hiddenUIView方法隐藏这个窗口

  7. Unity3D 集成 Face++ FacePlusPlus httpClient http协议 byte数组转string

    //開始由于要实现跨平台.考虑过用curl封装c++的dll(android *.so)的方式,在c#Dllimport实现 //后来发现Unity3D本身支持http协议.且face++的api都是 ...

  8. Core Foundation框架介绍

    Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...

  9. C#读取Word文档内容代码

    首先要添加引用com组件:然后引用: using Word = Microsoft.Office.Interop.Word; 获取内容: /// /// 读取 word文档 返回内容 /// //// ...

  10. android ImageView scaleType属性(转)

    使用ImageView时经常会用到scaleType属性,如: 1 2 3 4 5 6 7 8 9 <ImageView   android:layout_width="50dp&qu ...