ArrayList类(增强版)_Javascript教程-查字典教程网
ArrayList类(增强版)
ArrayList类(增强版)
发布时间:2016-12-30 来源:查字典编辑
摘要:Author:月影From:http://bbs.51js.com/thread-66469-1-1.html复制代码代码如下:functi...

Author:月影

From:http://bbs.51js.com/thread-66469-1-1.html

复制代码 代码如下:

<script>

functionArrayList()

{

varins=Array.apply(this,arguments);

ins.constructor=arguments.callee;

ins.base=Array;

ins.each=function(closure)

{

if(typeofclosure=='undefined')

closure=function(x){returnx};

if(typeofclosure!='function')

{

varc=closure;

closure=function(x){returnx==c}

}

varret=newArrayList();

varargs=Array.apply(this,arguments).slice(1);

for(vari=0;i<this.length;i++)

{

varrval=closure.apply(this,[this[i]].concat(args).concat(i))

if(rval||rval===0)

ret.push(rval);

}

returnret;

}

ins.trim=function()

{

returnthis.each.apply(this);

}

ins.all=function(closure)

{

returnthis.each.apply(this,arguments).length==this.length;

}

ins.any=function(closure)

{

returnthis.each.apply(this,arguments).length>0;

}

ins.contains=function(el)

{

returnthis.any(function(x){returnx==el});

}

ins.indexOf=function(el)

{

varret=this.each.call(this,function(x,i){returnel==x?i:false})[0];

returnret?ret:-1;

}

ins.subarr=function(start,end)

{

end=end||Math.Infinity;

returnthis.each.call(this,function(x,i){returni>=start&&i<end?x:null});

}

ins.valueOf=ins.toString;

ins.toString=function()

{

return'['+this.valueOf()+']';

}

ins.map=function(list,closure)

{

if(typeoflist=='function'&&typeofclosure!='function')

{

varli=closure;

closure=list;

list=li;

}

closure=closure||ArrayList;

returnthis.each.call(this,function(x,i){returnclosure.call(this,x,list[i])});

};

ins.slice=function()

{

returnthis.constructor(ins.base.prototype.slice.apply(this,arguments));

}

ins.splice=function()

{

returnthis.constructor(ins.base.prototype.splice.apply(this,arguments));

}

ins.concat=function()

{

returnthis.constructor(ins.base.prototype.concat.apply(this,arguments));

}

returnins;

}

vara=newArrayList(1,2,3);

alert(a.length);

alert(a);

alert(ainstanceofArray);

alert(a.constructor);

alert(ainstanceofArrayList);//可惜这个值不对,但是没法实现,只好放弃了

alert(a.each(function(x){returnx+x}));

alert(a.all(function(x){returnx>0}));

alert(a.all(function(x){returnx<1}));

alert(a.any(function(x){returnx==2}));

alert(a.contains(2));

alert(a.contains(-1));

varb=a.map([3,2],function(x,y){returnx+y});

alert(b);

alert(a.map([2,3,4]));

alert(a.indexOf(2));

alert(a.indexOf(-1));

alert(a.subarr(1,3));

alert(a.toString());

varb=newArrayList(a,a);

alert(b.toString());

alert(b.slice(1));

</script>

arr.all是当数组(集合)中的所有元素都满足条件时,返回true,否则返回false

arr.any是当数组(集合)中的所有元素中任意一个满足条件时,返回true,如果都不满足,返回false

arr.each返回由符合条件的每一个元素构成的子数组

arr.map是匹配两个数组(集合)并把它们的元素用指定闭包进行计算

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类