1. yui-each原码:

遍历YArray.each = YArray.forEach = Lang._isNative(Native.forEach) ? function (array, fn, thisObj) {
Native.forEach.call(array || [], fn, thisObj || Y);
return Y;
} : function (array, fn, thisObj) {
for (var i = 0, len = (array && array.length) || 0; i < len; ++i) {
if (i in array) {
fn.call(thisObj || Y, array[i], i, array);
}
} return Y; //返回Y,便于链式操作
};

2.tangram-each

tangram遍历var T,baidu=T= function(){
///import baidu; baidu.each = function( enumerable, iterator, context ) {
var i, n, t, result; if ( typeof iterator == "function" && enumerable) { // Array or ArrayLike or NodeList or String or ArrayBuffer
n = typeof enumerable.length == "number" ? enumerable.length : enumerable.byteLength;
if ( typeof n == "number" ) { // 20121030 function.length
//safari5.1.7 can not use typeof to check nodeList - linlingyu
if (Object.prototype.toString.call(enumerable) === "[object Function]") {
return enumerable;
} for ( i=0; i<n; i++ ) {
//enumerable[ i ] 有可能会是0
t = enumerable[ i ];
t === undefined && (t = enumerable.charAt && enumerable.charAt( i ));
// 被循环执行的函数,默认会传入三个参数(i, array[i], array)
result = iterator.call( context || t, i, t, enumerable ); // 被循环执行的函数的返回值若为 false 和"break"时可以影响each方法的流程
if ( result === false || result == "break" ) {break;}
} // enumerable is number
} else if (typeof enumerable == "number") { for (i=0; i<enumerable; i++) {
result = iterator.call( context || i, i, i, i);
if ( result === false || result == "break" ) { break;}
} // enumerable is json
} else if (typeof enumerable == "object") { for (i in enumerable) {
if ( enumerable.hasOwnProperty(i) ) {
result = iterator.call( context || enumerable[ i ], i, enumerable[ i ], enumerable ); if ( result === false || result == "break" ) { break;}
}
}
}
} return enumerable;
};
return baidu;
}();

3.tangram-array each原码

tangram array遍历var T,baidu=T= function(){
///import baidu.type;
///import baidu.array;
///import baidu.each;
///import baidu.forEach; baidu.array.extend({
each: function(iterator, context){
return baidu.each(this, iterator, context);
}, forEach: function(iterator, context){
return baidu.forEach(this, iterator, context);
}
});
/// Tangram 1.x Code Start
// TODO: delete in tangram 3.0
baidu.array.each = baidu.array.forEach = function(array, iterator, context) {
var fn = function(index, item, array){
return iterator.call(context || array, item, index, array);
};
return baidu.isEnumerable(array) ? baidu.each(array, typeof iterator == "function" ? fn : "", context) : array;
};
/// Tangram 1.x Code End
return baidu;
}();

4.underscore  each 原码:

underscore array遍历var 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;
}
}
}
};

5. qwrap – each

qwrap array遍历forEach: function(arr, callback, pThis) {
for (var i = 0, len = arr.length; i < len; i++) {
if (i in arr) {
callback.call(pThis, arr[i], i, arr);
}
}
}

比较

a. YUI会调用原生的forEach,可以用来遍历array,string,不能遍历object,也不会打断遍历

b.tangram最严谨,排除了function具有length属性,但YUI与underscore用了in 这个来排除掉了function,可以返回break 或者false打断遍历,可以用来遍历对象

c.  underscore 会调用原生的forEach,可以用来遍历对象,数组,字符串,可以被打断遍历,这个函数在underscore是一个基础的函数,

d. qwrap的最简洁,不会调用原生forEach,也不能打断遍历

YUI Array 之each| forEach(遍历)的更多相关文章

  1. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  2. 实现Foreach遍历

    实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...

  3. c#--foreach遍历的用法与split的用法

    一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素.      该循环 ...

  4. thinkphp使用foreach遍历的方法

    我们在做一些需求的时候可能会对遍历的上限有一定的要求,这时候就需要对上限进行限定 首先使用foreach遍历的输出数组相比较于volist功能较少 volist标签主要用于在模板中循环输出数据集或者多 ...

  5. 用数组指针遍历数组,FOR/FOREACH遍历数组

    1. 用数组指针遍历一维数组 <?php header("Content-type:text/html;charset=utf-8"); /*用数组指针遍历一位数组的值*/ ...

  6. forEach遍历数组对象且去重

    forEach遍历数组对象 var obj1 = [{ key: '01', value: '哈哈' }, { key: '02', value: '旺旺' }, { key: '03', value ...

  7. 为什么iterator,foreach遍历时不能进行remove操作?除了一种情况可以这样(特殊情况)?

    Exception in thread "main" java.util.ConcurrentModificationException 并发修改异常引发的思考! 1 foreac ...

  8. foreach遍历数组

    foreach遍历一维数组 <?php //PHP数组遍历:foreach //定义数组 $arr=array(1,2,3,4,5,6,7,8,9,10); //foreach循环 foreac ...

  9. PHP foreach遍历数组之如何判断当前值已经是数组的最后一个

    先给出foreach的两种语法格式 1,foreach (array_expression as $value) statement 2,foreach (array_expression as $k ...

随机推荐

  1. python安装包问题小结

    你可能遇到的问题包括:ImportError: No module named sklearn 未安装sklearn包ImportError: DLL load failed: 找不到指定的模块Imp ...

  2. 异常处理:你不可能总是对的2 - 零基础入门学习Python033

    异常处理:你不可能总是对的2 让编程改变世界 Change the world by program 我们已经了解足够多的可能碰到的异常,那我们这节课就来谈谈如何检测这些异常并处理它们. 异常检测我们 ...

  3. 排队论的C实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人实现了排队论思想,语言是C语言   #include<stdio.h> #in ...

  4. Tuning Radio Resource in an Overlay Cognitive Radio Network for TCP: Greed Isn’t Good

    好吧,这是09年七月发布在IEEE Communications Magazine的一篇文章. 核心二个词:overlay cognitive radio network,tcp 讲的是,在认知无线网 ...

  5. 用php理解指针--写给刚刚学习编程的人

    在刚刚学习编程时,可能for循环什么的还是可以理解,但是当学习到指针的时候,课上估计很多人就睡觉去了. 现在用两端php程序说明指针 先写一个简单的,大家都理解下 <?php class tex ...

  6. codechef Prime Distance On Tree(树分治+FFT)

    题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...

  7. 24C01的IIC 讀寫的c51程式

    /*------------------------------------------------------------------------------ 為了安全起見,程式中很多NOP是冗餘的 ...

  8. redo、undo、binlog的区别

    在MySQL中,redo.undo.binlog经常见,但很容易混淆这三者.   redo undo binlog 作用 保持事务的持久性 帮助事务回滚及MVCC的功能 进行Point-In-Time ...

  9. (转)open和fopen的区别:

    fopen与open的区别 open和fopen的区别: 1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓 ...

  10. rsyslog 收集系统日志

    <pre name="code" class="html">nginx 服务器配置: jrhwpt01:/root# cat /etc/rsyslo ...