`
sodler
  • 浏览: 15012 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

underscore中_.each与_.map的区别

阅读更多

版本一:

var number = ['ITEM000001','ITEM000003-2']
var obj_number = {}
var a = _.each(number,function(barcode){
        //没有‘-’的自身做key后正常统计数量,有‘-’的把‘-’后的作为数量,'-'前的作为key
	barcode = barcode.split('-')
	obj_number[barcode[0]] = ( obj_number[barcode[0]] || 0 ) + ( parseFloat(barcode[1]) || 1 )
})
console.log(a)
console.log(JSON.stringify(obj_number))

                 a = ITEM000001,ITEM000003-2

obj_number = {"ITEM000001":1,"ITEM000003":2}

 each遍历原数组每一个元素后,按顺序依次输出每一个函数执行过后的元素,而此处我将所有结果都放在一个对象中所以直接输出对象

 

var obj_number = {}
var b = _.map(number,function(barcode){
	barcode = barcode.split('-')
	obj_number[barcode[0]] = ( obj_number[barcode[0]] || 0 ) + ( parseFloat(barcode[1]) || 1 )
})
console.log(b)
console.log(JSON.stringify(obj_number))

                 b = ,

obj_number = {"ITEM000001":1,"ITEM000003":2}

 map将数组中的每一个元素经函数执行后,放入新数组,可如果不设置返回值,会为空(具体如下)

 

var c = _.map(number,function(barcode){
        '结果'+barcode
        })
console.log(c)

 c = ,

 map创建了一个新数组,函数执行完每一个值就给新数组赋值一次,但没有返回值,所以是空的

 

var d = _.map(number,function(barcode){
        return '结果'+barcode
        })
console.log(d)

d = 结果ITEM000001,结果ITEM000003-2

 设置返回值

 

var e =  _.each(number,function(barcode){
        '结果'+barcode
        })
var f = _.each(number,function(barcode){
        return g = '结果'+barcode
        })
console.log(e)
console.log(f)
console.log(g)

e = ITEM000001,ITEM000003-2

f = ITEM000001,ITEM000003-2

g = 结果ITEM000003-2

each对每一个元素遍历,如果用户不自己建立一个数组保存,函数执行结果会全部消失

        g只输出一个结果,因为each依次输出每一个元素,以这种形式定义数组输出的话,会将每一个结果依次赋值给g,就会覆盖,目前本人使用push推入新数组(对象)

 版本二:

 map会先创建一个与输入数组等长的数组,再将return的内容赋进去,因此当需要的结果不是数组形式时使用each更好,而哪怕是数组形式的结果,需要的长度不一致时,比如只有输入数组中的几个作为结果时会产生underfind

var a = _.map([1,2,3,4,5,6],function(num){
	if( num > 3 ){
		return num
	}
})
=>[undefined, undefined, undefined, 4, 5, 6]

搭配compact去除所有false值之后,才能得到需要的结果

compact_.compact(array) 
在javascript中, false, null, 0, "", undefined 和 NaN 都是false值.

_.compact([undefined, undefined, undefined, 4, 5, 6]);
=>[4,5,6]

  一般用不到map的一一对应映射的特性时使用each就好

 

 

http://www.bootcss.com/

包含bootcss相关优质项目

 

最后附上each和map的源码:

// The cornerstone, an `each` implementation, aka `forEach`.

  // Handles raw objects in addition to array-likes. Treats all

  // sparse array-likes as if they were dense.

  _.each = _.forEach = function(obj, iteratee, context) {

    if (obj == null) return obj;

    iteratee = createCallback(iteratee, context);

    var i, length = obj.length;

    if (length === +length) {

      for (i = 0; i < length; i++) {

        iteratee(obj[i], i, obj);

      }

    } else {

      var keys = _.keys(obj);

      for (i = 0, length = keys.length; i < length; i++) {

        iteratee(obj[keys[i]], keys[i], obj);

      }

    }

    return obj;

  };

 

  // 返回将iteratee(迭代)应用于每个元素的结果。

  _.map = _.collect = function(obj, iteratee, context) {

    if (obj == null) return [];

    iteratee = _.iteratee(iteratee, context);

    var keys = obj.length !== +obj.length && _.keys(obj),

        length = (keys || obj).length,

        results = Array(length),

        currentKey;

    for (var index = 0; index < length; index++) {

      currentKey = keys ? keys[index] : index;

      results[index] = iteratee(obj[currentKey], currentKey, obj);

    }

    return results;

  };

 

分享到:
评论

相关推荐

    underscore-1.6.0.zip

    1. **数组操作**:underscore提供了多种处理数组的方法,如_.each()用于遍历数组,_.map()用于映射数组元素,_.filter()用于筛选符合条件的元素,_.reduce()用于对数组元素进行累加或聚合等。 2. **对象操作**:...

    backbone.js underscore.js

    1. **数组操作(Array Functions)**:如`_.each`用于遍历数组,`_.map`用于映射数组,`_.filter`用于筛选数组元素,`_.reduce`用于数组的累加计算。 2. **对象操作(Object Functions)**:例如`_.keys`获取对象的所有...

    Underscore ,是js的一个实用库

    Underscore提供了许多操作数组的方法,如`_.each()`用于遍历数组,`_.map()`用于映射数组,`_.filter()`用于过滤数组元素,`_.reduce()`(或`_.foldl`)用于对数组进行归约操作,`_.uniq()`用于去除数组中的重复元素...

    underscore.js帮助文档

    - `_.each(array, iterator, [context])`:遍历数组中的每个元素,执行迭代器函数。 - `_.map(array, iterator, [context])`:对数组中的每个元素应用迭代器函数,返回新数组。 - `_.reduce(array, iterator, ...

    underscore应用

    1. **数组操作**:underscore提供了丰富的数组操作方法,如`_.each()`用于遍历数组,`_.map()`用于映射数组元素,`_.filter()`用于筛选满足条件的元素,`_.reduce()`(或`_.foldl`)用于对数组进行归约,以及`_.uniq...

    underscore-1.4.3.zip

    《深入理解Underscore.js 1.4.3:核心概念与实践》 Underscore.js,一个轻量级的JavaScript实用库,以其强大的工具集和对JavaScript原生功能的补充,深受开发者喜爱。在本篇文章中,我们将深入探讨Underscore 1.4.3...

    backbone_underscore_注释版

    2. **_.map() / _.collect()**:将数组中的每个元素通过指定的函数转换,返回新的数组。 3. **_.reduce() / _.foldl()**:对数组进行累加操作,将所有元素归一化为单个值。 4. **_.filter() / _.select()**:根据...

    underscore.rar

    Underscore.js是一个轻量级的JavaScript库,它提供了一系列实用的功能,用于处理数组、对象、函数以及其他数据结构。这个库被广泛应用于前端开发,尤其是与jQuery和其他JavaScript库结合使用时,可以极大地增强代码...

    underscore源码学习计划

    1. _.each():遍历数组或对象,是Underscore.js中最基础的迭代函数,可用于执行循环操作。 2. _.map():对数组中的每个元素应用一个函数并返回新的数组,实现了函数映射。 3. _.filter():根据指定的测试函数过滤...

    lodash underscore js库速查手册

    _.map(list, iterator, [context]) Alias: collect Produces a new array of values by mapping each value in list through a transformation function ( _.reduce(list, iterator, memo, [context]) Aliases: ...

    微信小程序demo:使用第三方模块Underscore.js,Immutable.js,UUID.zip

    1. **数组操作**:Underscore.js提供了`_.each`用于遍历数组,`_.filter`用于筛选符合条件的元素,`_.map`用于对数组元素进行映射操作,`_.find`用于查找满足条件的第一个元素等。 2. **对象操作**:包括`_.keys`...

    javascript工具_腰带.zip

    1. 高阶函数:Underscore提供了map、filter、reduce等高阶函数,方便对数组进行操作和转换。 2. 辅助函数:如_.each、_.keys、_.isEqual等,用于迭代、获取对象键值或比较对象。 3. 模板引擎:Underscore提供了一种...

    underscore-analysis, underscore-1.8.3.js 源码解读 & 系列文章(完 ).zip

    例如,`map`函数可以对数组中的每个元素应用一个函数并返回新的数组,`filter`则用于筛选满足条件的元素,而`reduce`则是将数组归纳为单一值,`each`用于遍历数组或对象并执行回调函数。 在underscore-1.8.3.js的...

    backbound. underscore

    3. **函数操作**:underscore.js 提供了throttle、debounce、once、wrap等函数,这些函数与事件驱动和异步编程密切相关。比如,`_.throttle` 可以限制函数的执行频率,防止过于频繁的调用,`_.debounce` 用于延迟...

    analyze_Underscore.js:解析underscore.js源码-源码解析

    1. 集合操作:Underscore.js提供了丰富的集合操作函数,如_.each用于遍历数组或对象,_.map用于映射操作,_.filter用于筛选元素,_.reduce用于聚合计算。这些函数的实现采用了闭包和迭代器模式,优化了性能且易于...

    underscore.js:underscore.js原始解析-源码解析

    《underscore.js:深入解析与源码解读》 underscore.js,作为一个轻量级的JavaScript库,以其强大的功能性、高效性和灵活性,被广泛应用于前端开发中。它提供了大量的实用函数,帮助开发者处理数组、对象、函数等...

    underscore-example:Underscore.js 演示

    **数组操作**:Underscore.js提供了丰富的数组处理方法,如`_.each`用于遍历数组,`_.map`用于映射数组元素,`_.filter`用于筛选符合条件的元素,`_.reduce`用于对数组进行归约,`_.indexOf`用于查找元素在数组中的...

    微信小程序demo:使用第三方模块Underscore.js,Immutable.js,UUID.rar

    例如,它包含的`_.each`用于遍历数组或对象,`_.filter`用于过滤数据,`_.map`用于转换数据,以及`_.reduce`进行聚合操作等。这些方法使得代码更加简洁、可读性更强。 **Immutable.js** 是一个JavaScript库,专注于...

    eb-api-1.0.30.zip

    《深入剖析开源项目:underscore-java在Java端口的应用与拓展》 开源项目是软件开发领域的重要组成部分,它们促进了技术的共享和创新。今天我们将聚焦于一个名为"underscore-java"的开源项目,它是一个针对Java平台...

    underscore-basic-tutorial:underscore.js的基础教程

    在这个基础教程中,我们将深入理解Underscore.js的核心概念和常用方法。 一、简介 Underscore.js由Jeremy Ashkenas 创建,它的设计灵感来源于Ruby语言,旨在使JavaScript编程更加简洁和高效。这个库的目标是通过...

Global site tag (gtag.js) - Google Analytics