YUI Array 之each| forEach(遍历)
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(遍历)的更多相关文章
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 实现Foreach遍历
实现Foreach遍历的集合类,需要实现IEnumerable接口,泛型集合则需要实现IEnumerable<T>接口 using System; using System.Collect ...
- c#--foreach遍历的用法与split的用法
一. foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成.in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素. 该循环 ...
- thinkphp使用foreach遍历的方法
我们在做一些需求的时候可能会对遍历的上限有一定的要求,这时候就需要对上限进行限定 首先使用foreach遍历的输出数组相比较于volist功能较少 volist标签主要用于在模板中循环输出数据集或者多 ...
- 用数组指针遍历数组,FOR/FOREACH遍历数组
1. 用数组指针遍历一维数组 <?php header("Content-type:text/html;charset=utf-8"); /*用数组指针遍历一位数组的值*/ ...
- forEach遍历数组对象且去重
forEach遍历数组对象 var obj1 = [{ key: '01', value: '哈哈' }, { key: '02', value: '旺旺' }, { key: '03', value ...
- 为什么iterator,foreach遍历时不能进行remove操作?除了一种情况可以这样(特殊情况)?
Exception in thread "main" java.util.ConcurrentModificationException 并发修改异常引发的思考! 1 foreac ...
- foreach遍历数组
foreach遍历一维数组 <?php //PHP数组遍历:foreach //定义数组 $arr=array(1,2,3,4,5,6,7,8,9,10); //foreach循环 foreac ...
- PHP foreach遍历数组之如何判断当前值已经是数组的最后一个
先给出foreach的两种语法格式 1,foreach (array_expression as $value) statement 2,foreach (array_expression as $k ...
随机推荐
- log4j配置文件及nutch中的日志配置
使用slf4j作为日志系统时,由于slf4j只是一个接口,它需要一个具体实现来执行. 具体参考http://blog.csdn.net/jediael_lu/article/details/43854 ...
- Android App 沉浸式状态栏解决方案
伴随着 Android 5.0 发布的 Material Design,让 Android 应用告别了以前的工程师审美,迎来了全新的界面,灵动的交互,也让越来越多的 App 开始遵从 material ...
- 鼠标悬停移除更换class
$("#xinl").mouseover(function() //鼠标悬停执行函数 { $(".xl").removeClass().addClass(&q ...
- python——lambda
一lambda函数基础 1.lambda函数为匿名函数,即没有具体的函数名,而def函数创建的函数有函数名. >>> def foo(): return 'test' #命名为foo ...
- Hdu1094
#include <stdio.h> int main() { ; while(scanf("%d",&n)!=EOF){ ;i<n;i++){ scan ...
- 分布式文件系统glusterfs安装步骤
我的系统是 RHEL5 , 可能环境不一样, 需要安装的第三方依赖不一样啊, 反正大家在安装的过程中缺少什么就去安装什么, 一般都会有提示的. 下载 glusterfs-3.2.0.tar.gz ...
- 【剑指offer】面试题29:数组中出现次数超过一半的数字
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- Java实现配置加载机制
前言 现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty…等等数都数不过来的软件,要满足通用性,都会提供配置文件供使用者定制功能. 甚至有一些例如Netty这 ...
- 【转】ffmpeg中的sws_scale算法性能测试
经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理.以前一直很懒,懒得测试和甄别应该使用哪种算法,最近的工作时间,很多时候需要等待别人.忙里 ...
- C#中通过位运算实现多个状态的判断
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...