一个对于Array的简单扩展

2018-10-15 18:05

阅读:580

其实就是prototype1.4中枚举对象部分的简化版本,
先贴代码,等下再一一解释,对初学者可能有帮助

最近一直在学习Python,一直感叹于python中list的灵活,
同样都是数组,为什么javascript不能和python中的一样灵活呢,
(其实下面这些prototype1.4已经实现了,不过prototype太胖了,你知道的,我对胖女人不感兴趣)
于是就有了下面的代码.....

复制代码 代码如下:
<script>
Array.prototype.map=function(f){
vararr=[]
for(vari=0;i<this.length;i++)arr.push(f(this[i]))
returnarr
}

Array.prototype.each=function(f){
for(vari=0;i<this.length;i++)f(this[i])
}

Array.prototype.find=function(f){
for(vari=0;i<this.length;i++)if(f(this[i]))returnthis[i]
returnnull
}

Array.prototype.findAll=function(f){
vararr=[]
for(vari=0;i<this.length;i++)if(f(this[i]))arr.push(this[i])
returnarr
}

Array.prototype.getPart=function(f){
for(vari=0;i<this.length;i++)if(f(this[i]))return[this.slice(0,i+1),this.slice(i+1)]
}


Array.prototype.all=function(f){
for(vari=0;i<this.length;i++)if(!f(this[i]))returnfalse
returntrue
}

Array.prototype.any=function(f){
for(vari=0;i<this.length;i++)if(f(this[i]))returntrue
returnfalse
}

Array.prototype.grep=function(regex,f){
vararr=[]
for(vari=0;i<this.length;i++){
if(this[i].toString().match(regex))arr.push((ffunction(x){returnx})(this[i]))
}
returnarr
}

for(vari=0;i<this.length;i++)if(this[i]==v)returntrue
returnfalse
}
Array.prototype.indexOf=function(v){
for(vari=0;i<this.length;i++)if(this[i]==v)returni
return-1
}

Array.prototype.inject=function(v,f){
varvv=v
for(vari=0;i<this.length;i++)vv=f(vv,this[i])
returnvv
}

Array.prototype.max=function(){
varv=this[0];
for(vari=0;i<this.length;i++)if(this[i]>v)v=this[i]
returnv
}

Array.prototype.min=function(){
varv=this[0];
for(vari=0;i<this.length;i++)if(this[i]<v)v=this[i]
returnv
}

Array.prototype.partition=function(f){
vararr1=[],arr2=[]
for(vari=0;i<this.length;i++)f(this[i])?arr1.push(this[i]):arr2.push(this[i])
return[arr1,arr2]
}

</script>
<textareaid=o>
这里有很多文本和script块,而且script块的数目不定
<script>alert(1)</script>
<script>
functionfff(){
alert(ffffunction)
}
fff()</script>
<script>alert(lastalert())</script>
</textarea>

<script>
//对数组中每个元素都调用函数f执行,并把执行的结果按数组原排列顺序返回,返回一个数组
Array.prototype.map=function(f){
vararr=[]
for(vari=0;i<this.length;i++)arr.push(f(this[i]))
returnarr
}

//对数组中每个元素都调用函数f执行,只执行,不返回结果
Array.prototype.each=function(f){
for(vari=0;i<this.length;i++)f(this[i])
}

//最简单的例子
vararr=[3,1,5,2,7]
vararr2=arr.map(function(x){returnx*x})
alert(arr2)

//取整
vararr3=[3.121,1.555,5.8,2.0,7.9]
vararr4=arr3.map(Math.round)
alert(arr4)


//返回数组中每个字符串的长度
vara1=[dasfsdfas,dasffdfs,ds,2,cccccc]
vara2=a1.map(function(x){returnx.length})
alert(a2)


//这个例子比较常用,比如用ajax抓了一个页面,怎么执行页面中的所有script块呢?
varf=function(s){returns.replace(/^<script.*?>/,).replace(/<\/script>$/,)}
o.value.match(/(?:<script.*?>)((\n\r.)*?)(?:<\/script>)/gi).map(f).each(eval)

//更复杂的例子
//
</script>


<script>
//获取第一个使函数f为真的元素,如果找不到返回null
Array.prototype.find=function(f){
for(vari=0;i<this.length;i++)if(f(this[i]))returnthis[i]
returnnull
}

//获取所有使函数f为真的元素,如果找不到返回空数组
Array.prototype.findAll=function(f){
vararr=[]
for(vari=0;i<this.length;i++)if(f(this[i]))arr.push(this[i])
returnarr
}

//在数组中找一个偶数
vararr=[3,1,5,2,7,8,1,0,10]
varv=arr.find(function(x){returnx%2==0})
alert(v)

//找所有偶数
vararr2=arr.findAll(function(x){returnx%2==0})
alert(arr2)

</script>

<script>
//返回一个包含两个元素的数组。这两个元素都是一个数组arr1是所有能让f为真的元素组成的数组arr2是剩下的元素
Array.prototype.partition=function(f){
vararr1=[],arr2=[]
for(vari=0;i<this.length;i++)f(this[i])?arr1.push(this[i]):arr2.push(this[i])
return[arr1,arr2]
}

//只有数组中所有元素都能让f为真才返回真
Array.prototype.all=function(f){
for(vari=0;i<this.length;i++)if(!f(this[i]))returnfalse
returntrue
}

//只要存在任何一个元素能让f为真就返回真
Array.prototype.any=function(f){
for(vari=0;i<this.length;i++)if(f(this[i]))returntrue
returnfalse
}

//寻找偶数和奇数
vararr=[3,1,5,2,7,8,1,0,10]
vara=arr.partition(function(x){returnx%2==0})
alert(a[0])//返回所有偶数
alert(a[1])//所有奇数

varb=arr.all(function(x){returnx%2==0})//检查是不是数组中所有元素都是偶数
varc=arr.any(function(x){returnx%2==0})//检查数组中是不是存在偶数
alert(b)
alert(c)

</script>

Array.prototype.grep=function(regex,f)

用给出的正则表达式去匹配数组中的每一个元素,
对符合匹配的元素返回一个数组,当然,如果存在函数f,匹配结果还要通过函数f的处理

if(!Array.prototype.push){//好象ie5.0以下不支持push()方法
Array.prototype.push=function(){
for(vari=0;i<arguments.length;i++){
this[this.length]=arguments[i];
}
returnthis.length;
}
}

//vararr=[]
//arr.push(1,2,3)



评论


亲,登录后才可以留言!