前言:
关于array相关的api其实已经研习比较了多个框架的了,期间也看过部分YUI的源码,一直没有开一个分类去吧YUI,关于YUI,其实自己一直觉得没有一个完备的官方中文文档(官网的文档写的过于笼统)去推广,但是很多的公司前端框架的原型还是从YUI中衍生或者变形而来,学习一下还是有收获的。
注释:本分类所有取的YUI的源码版本为3.4.0
正文:
1、 hash
以前参照tangram整理过一个hash的api设计。
这边主要贴出YUI的写法,只是细节上有小差异。
/* @example: Y.Array.hash(['A','B','C'],['a','b']) {'A':'a','B':'b','C':true} */ YArray.hash = function(keys,values){ var hash = {}, vlen = (values && values.length) || 0, //这边给了一个默认值0 i,len; for(i=0,len = keys.length;i<len;i++){ //加了一个判断 if(i in keys){ hash[keys[i]] = vlen > i && i in values ? values[i] : true; } } return hash; }
2、indexOf
关于1.6特性的indexOf
以前整理的一个indexOf的api
var Native = Array.prototype; YArray.indexOf = Native.indexOf ? function(array,value){ //没有支持参数fromIndex return Native.indexOf(array,value); } : function(array,value){ for(var i =0,len = array.length,i<len;i++){ if(array[i] == value){ return i; } } return -1; };
3、each
前面整理的each的api
var Native = Array.prototype; YArray.each = YArray.forEach = 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){ //可以加上返回值判断进行循环的break fn.call(thisObj || Y , array[i],i,array); } } return Y; };
4、numericSort
/*
@example
[42, 23, 8, 16, 4, 15].sort(Y.Array.numericSort);
=> [4, 8, 15, 16, 23, 42]
@mark 个人感觉这个api使用度不是那么高
*/
YArray.numericSort = function(a,b){
return a -b;
};