前言:
关于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;
};

本文详细解析了YUI 3.4.0版本中Array模块的几个核心API,包括hash、indexOf、each和numericSort等方法的具体实现及应用场景,对于理解YUI框架中的数组操作提供了深入的指导。
625

被折叠的 条评论
为什么被折叠?



