一个对于Array的简单扩展_Javascript教程-查字典教程网
一个对于Array的简单扩展
一个对于Array的简单扩展
发布时间:2016-12-30 来源:查字典编辑
摘要:其实就是prototype1.4中枚举对象部分的简化版本,先贴代码,等下再一一解释,对初学者可能有帮助最近一直在学习Python,一直感叹于...

其实就是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((f||function(x){returnx})(this[i]))

}

returnarr

}

Array.prototype.include=function(v){

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)

//更复杂的例子

//http://community.csdn.net/Expert/topic/4796/4796192.xml?temp=.2977564

</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")

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