版本一:
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;
};
相关推荐
1. **数组操作**:underscore提供了多种处理数组的方法,如_.each()用于遍历数组,_.map()用于映射数组元素,_.filter()用于筛选符合条件的元素,_.reduce()用于对数组元素进行累加或聚合等。 2. **对象操作**:...
1. **数组操作(Array Functions)**:如`_.each`用于遍历数组,`_.map`用于映射数组,`_.filter`用于筛选数组元素,`_.reduce`用于数组的累加计算。 2. **对象操作(Object Functions)**:例如`_.keys`获取对象的所有...
Underscore提供了许多操作数组的方法,如`_.each()`用于遍历数组,`_.map()`用于映射数组,`_.filter()`用于过滤数组元素,`_.reduce()`(或`_.foldl`)用于对数组进行归约操作,`_.uniq()`用于去除数组中的重复元素...
- `_.each(array, iterator, [context])`:遍历数组中的每个元素,执行迭代器函数。 - `_.map(array, iterator, [context])`:对数组中的每个元素应用迭代器函数,返回新数组。 - `_.reduce(array, iterator, ...
1. **数组操作**:underscore提供了丰富的数组操作方法,如`_.each()`用于遍历数组,`_.map()`用于映射数组元素,`_.filter()`用于筛选满足条件的元素,`_.reduce()`(或`_.foldl`)用于对数组进行归约,以及`_.uniq...
《深入理解Underscore.js 1.4.3:核心概念与实践》 Underscore.js,一个轻量级的JavaScript实用库,以其强大的工具集和对JavaScript原生功能的补充,深受开发者喜爱。在本篇文章中,我们将深入探讨Underscore 1.4.3...
2. **_.map() / _.collect()**:将数组中的每个元素通过指定的函数转换,返回新的数组。 3. **_.reduce() / _.foldl()**:对数组进行累加操作,将所有元素归一化为单个值。 4. **_.filter() / _.select()**:根据...
Underscore.js是一个轻量级的JavaScript库,它提供了一系列实用的功能,用于处理数组、对象、函数以及其他数据结构。这个库被广泛应用于前端开发,尤其是与jQuery和其他JavaScript库结合使用时,可以极大地增强代码...
1. _.each():遍历数组或对象,是Underscore.js中最基础的迭代函数,可用于执行循环操作。 2. _.map():对数组中的每个元素应用一个函数并返回新的数组,实现了函数映射。 3. _.filter():根据指定的测试函数过滤...
_.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: ...
1. **数组操作**:Underscore.js提供了`_.each`用于遍历数组,`_.filter`用于筛选符合条件的元素,`_.map`用于对数组元素进行映射操作,`_.find`用于查找满足条件的第一个元素等。 2. **对象操作**:包括`_.keys`...
1. 高阶函数:Underscore提供了map、filter、reduce等高阶函数,方便对数组进行操作和转换。 2. 辅助函数:如_.each、_.keys、_.isEqual等,用于迭代、获取对象键值或比较对象。 3. 模板引擎:Underscore提供了一种...
例如,`map`函数可以对数组中的每个元素应用一个函数并返回新的数组,`filter`则用于筛选满足条件的元素,而`reduce`则是将数组归纳为单一值,`each`用于遍历数组或对象并执行回调函数。 在underscore-1.8.3.js的...
3. **函数操作**:underscore.js 提供了throttle、debounce、once、wrap等函数,这些函数与事件驱动和异步编程密切相关。比如,`_.throttle` 可以限制函数的执行频率,防止过于频繁的调用,`_.debounce` 用于延迟...
1. 集合操作:Underscore.js提供了丰富的集合操作函数,如_.each用于遍历数组或对象,_.map用于映射操作,_.filter用于筛选元素,_.reduce用于聚合计算。这些函数的实现采用了闭包和迭代器模式,优化了性能且易于...
《underscore.js:深入解析与源码解读》 underscore.js,作为一个轻量级的JavaScript库,以其强大的功能性、高效性和灵活性,被广泛应用于前端开发中。它提供了大量的实用函数,帮助开发者处理数组、对象、函数等...
**数组操作**:Underscore.js提供了丰富的数组处理方法,如`_.each`用于遍历数组,`_.map`用于映射数组元素,`_.filter`用于筛选符合条件的元素,`_.reduce`用于对数组进行归约,`_.indexOf`用于查找元素在数组中的...
例如,它包含的`_.each`用于遍历数组或对象,`_.filter`用于过滤数据,`_.map`用于转换数据,以及`_.reduce`进行聚合操作等。这些方法使得代码更加简洁、可读性更强。 **Immutable.js** 是一个JavaScript库,专注于...
《深入剖析开源项目:underscore-java在Java端口的应用与拓展》 开源项目是软件开发领域的重要组成部分,它们促进了技术的共享和创新。今天我们将聚焦于一个名为"underscore-java"的开源项目,它是一个针对Java平台...
在这个基础教程中,我们将深入理解Underscore.js的核心概念和常用方法。 一、简介 Underscore.js由Jeremy Ashkenas 创建,它的设计灵感来源于Ruby语言,旨在使JavaScript编程更加简洁和高效。这个库的目标是通过...