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

语法:

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

说明:

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

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

代码示例:

示例一: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内

示例三: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]

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

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

操作非集合,返回空数据

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); //=> []

iteratee还可以是全局的方法

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

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]
时间: 2024-10-17 05:19:52

underscorejs之_.map(list, iteratee, [context])的相关文章

underscorejs之_.countBy(list, iteratee, [context])

语法 _.countBy(list, iteratee, [context]) 说明 排序一个列表组成一个组,并且返回各组中的对象的数量的计数.类似groupBy,但是不是返回列表的值,而是返回在该组中值的数目.就像EXCEL里的分类统计 list为 遍历的集合,如数组.对象.字符串.arguments等. iteratee 迭代器,可以是一个function也可以字符串等. iteratee 有三个参数 (element, index, list) iteratee 需要有返回 context

underscorejs之 _.indexBy(list, iteratee, [context])

语法 _.indexBy(list, iteratee, [context]) 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 的iterator 函数(或属性名), 返回一个每一项索引的对象.和groupBy非常像,但是当你知道list的key是唯一的时候可以使用indexBy**. 什么时候用_.indexBy? api都会给我们返回类似下面这样子的数据,现在我们要写一个方法.传入id,返回相对应的name或是其他. var data = [{ id: 1, name: '

underscorejs类库之_.each(list, iteratee, [context])

语法: _.each(list, iteratee, [context]) 说明: 依次对集合的所有元素进行某种操作,原样返回list.接收3个参数,list集合可以理解为数据源:iteratee即迭代器可以理解为回调方法;context执行上下文. list可以为数组,对象,字符串和arguments iteratee 会传第三个参数(element, index, list)或(value, key, list) context可以改变iteratee内部的this 示例一:each可以循环

underscorejs之_.filter(list, predicate, [context])

语法: _.filter(list, predicate, [context]) 说明: 对list集合的每个成员依次进行匹配(根据predicate迭代函数检测),返回匹配成功的集合 list可以为数组,对象,字符串和arguments predicate会传第三个参数value, key, list(参数名可自定义) predicate函数需要返回值 context可以改变predicate函数内部的this 代码示例: 示例一:filter对数组,对象,字符串,arguments进行操作并

underscorejs之_.find(list, predicate, [context])

语法: _.find(list, predicate, [context]) 说明: 对list集合的每个成员依次进行匹配(根据predicate迭代函数检测),匹配成功则立即返回当前成员 list可以为数组,对象,字符串和arguments predicate会传第三个参数value, key, list(参数名可自定义) predicate函数需要返回值 context可以改变predicate函数内部的this 代码示例: 示例一:find对数组,对象,字符串,arguments进行操作并

浅谈 Underscorejs中 _.throttle 和 _.debounce 的差异和使用场景

通常的函数(或方法)调用过程分为三个部分:请求.执行和响应.(文中"请求"与"调用"同义,"响应"与"返回"同义,为了更好的表述,刻意采用请求和响应的说法.) 某些场景下,比如响应鼠标移动或者窗口大小调整的事件,触发频率比较高.若稍处理函数微复杂,需要较多的运算执行时间,响应速度跟不上触发频率,往往会出现延迟,导致假死或者卡顿感. 在运算资源不够的时候,最直观的解决办法就是升级硬件,诚然通过购买更好的硬件可以解决部分问题,但是

each_.each(list, iteratee, [context]) 别名: forEach

<!DOCTYPE html> <html> <meta charset="utf-8"> <head> <title></title> <script type="text/javascript" src="underscore.js"></script> </head> <script type="text/javasc

[C/C++标准库]_[初级]_[map的查找函数分析]

场景: 1. map在查找非数值索引(数值非重复索引可以使用vector)的对象时是高效率的,因为用的红黑树的实现,查找和插入都是logarithmic time 效率很高. 2.map可以说是很实用的数据结构. 3.使用multimap可以存储重复key,使用场景就是1对多的情况,比如一个联系人对应多个分组. void TestMap() { //map一般是通过红黑树来实现.http://en.cppreference.com/w/cpp/container/map //multimap也一

underscorejs之_.contains(list, item, fromIndex, guard)

语法: _.contains(list, item, fromIndex, guard) 说明: list集合包含指定的值则返回true,否则返回false list可以为数组,对象,字符串和arguments item是一个参数(contains会处理list中是否包含此参数),可以为数字,字符串 fromIndex是一个数字,根据此索引决定list开始检索的位置,可为正值,也可为负值:(负值不是真正的负值,而是list的倒数,下面会详细讲解):若非数字则fromIndex的索引从0开始 代码