怎样理解java中的lo流_[Java教程]【理解Underscore和Lo

[Java教程]【理解Underscore和Lo

0 2013-06-03 14:48:37

遍历集合,对集合中的每个元素执行回调。

API

Lo-Dash

_.forEach(collection [, callback=identity, thisArg])

Aliases

each

Arguments collection (Array|Object|String): 要遍历的集合

[callback=identity] (Function): 每次迭代中调用的函数

[thisArg] (任意): 绑定到callback的this

callback接受三个参数: (value, index|key, collection) Returns

(Array, Object, String): 返回collection.

Underscore

_.each(list, iterator, [context])Aliases

forEachArguments list (Array|Object|String): 要遍历的集合

iterator (Function): 每次迭代中调用的函数

[context] (任意): 绑定到callback的this

iterator接受三个参数: (element|value, index|key, list) Returns

(Array, Object, String): 返回undefined.

Note Lo-Dash可以省略回调函数,而Underscore则必须传入

Lo-Dash可以通过在回调中返回false提前结束迭代

Lo-Dash会返回Collection从而允许链式操作,Underscore的返回值则是undefined

Example

Lo-Dash_.forEach([1,2,3])// => 返回[1,2,3]_([1, 2, 3]).forEach(alert).join(',');// => alert每个数字并返回'1,2,3'_.forEach({ 'one': 1, 'two': 2, 'three': 3 }, alert);// => alert每个数字value(不保证按照定义的顺序执行)

Underscore_.each([1, 2, 3], alert);// => alert每个数字_.each({one : 1, two : 2, three : 3}, alert);// => alert每个数字value(不保证按照定义的顺序执行)

Source

Lo-Dashfunction forEach(collection, callback, thisArg) { var index = -1, length = collection ? collection.length : 0; callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg); if (typeof length == 'number') { while (++index < length) { if (callback(collection[index], index, collection) === false) { break; } } } else { forOwn(collection, callback); } return collection;}

Underscorevar each = _.each = _.forEach = function(obj, iterator, context) { if (obj == null) return; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); } else if (obj.length === +obj.length) { for (var i = 0, l = obj.length; i < l; i++) { if (iterator.call(context, obj[i], i, obj) === breaker) return; } } else { for (var key in obj) { if (_.has(obj, key)) { if (iterator.call(context, obj[key], key, obj) === breaker) return; } } }};

Additionsobj.length === +obj.length +obj: 将obj转换成10进制数,否则返回NaN。因此,上面的判断等价于obj.length && typeof obj.length == 'number'

if (iterator.call(context, obj[i], i, obj) === breaker) return; breaker是预先定义的空对象({}),Underscore内部用于提前结束循环的标志,并没有对外公开。另外,因为对象的===比较的是对象地址,所以就算用户在自己的iterator中返回{},上述if仍然不成立

for in循环不会遍历non-enumerable属性,因此像Object的toString等就不会被迭代

本文网址:http://www.shaoqun.com/a/61608.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值