版本一:
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-min.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: ...
Explore the Underscore.js library by example using a test-driven development approach About This Book Understand and learn to apply functional programming principles using the built-in functions of ...
NULL 博文链接:https://bijian1013.iteye.com/blog/2281404
Underscore.js 的 JSON 操作方法 获取- 获取(json,选择器) 获取 json 中的值 var json = { some : { nested : "value" } } _ . json . get ( json , "some.nested" ) => "value" 设置- 设置(json,选择器,值...
backbone.js,underscore.js,jquery-1.10.2.js
_.haz() _.haz() 就像 _.has() 但是这个下划线和/或 lodash mixin 可以让你用一个点表示...特此授予出于任何目的付费或免费使用、复制、修改和/或分发本软件的许可,前提是上述版权声明和本许可声明出现在所有副本中。
Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。它是这个问题的答案:“如果我在一个空白的HTML页面前坐下, 并希望立即开始工作, 我需要什么?“...它...
_.find() 错误说明启动应用程序: meteor run 按一次“单击我”按钮打开浏览器控制台查看“Uncaught TypeError”环境信息操作系统:OSX 优胜美地 10.10.2 浏览器:谷歌浏览器 41.0.2272.76(64 位)
underscore-1.6.0.zip
underscore-1.4.3.zip
Underscore.js是目前最好用的Javascript工具包,提供了100多个函数。Underscore.php是Underscore.js的PHP移植版,并且实现了部分Underscore.js中的功能! 我花了一个月的时间将Underscore.php的文档翻译为中文,开源...
前端项目-underscore.string,underline.js javascript库的字符串操作扩展。
backbone_underscore,Underscore.js 1.3.3中文注释版
underscore-analysis, underscore-1.8.3.js 源码解读 & 系列文章(完 )
Underscore.js 是一个实用的JavaScript工具库,提供了类似 Prototype 功能的编程支持,但没有对 JavaScript 内置的对象进行扩展。 标签:Underscore
下划线mixins 用作underscore混合的方法的集合目录入门_ = require ' underscore '_ . mixin require ( ' underscore-mixins ' )文献资料_.deepClone 返回给定对象的深层克隆obj = { ... } # some object with ...
.indexOf - 返回可以在数组中找到目标的索引_.filter - 返回数组中通过真值测试的所有元素_.reject - 返回数组中所有未通过真值测试的元素_.uniq - 生成数组的无重复版本_.map - 返回将迭代器应用于每
用过Underscore的朋友都知道,它对数组(集合)的遍历有着非常完善的API可以调用的,_.each()就是其中一个。下面就是一个简单的例子: var arr = [1, 2, 3, 4, 5]; _.each(arr, function(el) { console.log(el); }...