一个对于Array的简单扩展

2016-02-19 11:59 3 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐一个对于Array的简单扩展,无聊中的都看过来。

【 tulaoshi.com - Web开发 】

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

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

代码如下:

script
Array.prototype.map = function(f) {  
  var arr=[]
  for(var i=0;ithis.length;i++) arr.push(f(this[i]))
  return arr  
}

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

Array.prototype.find = function(f) {  
  for(var i=0;ithis.length;i++)  if (f(this[i])) return this[i]
  return null
}

Array.prototype.findAll = function(f) { 
  var arr=[]
  for(var i=0;ithis.length;i++)  if (f(this[i])) arr.push(this[i])
  return arr
}

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


Array.prototype.all = function(f) { 
  for(var i=0;ithis.length;i++)  if (!f(this[i])) return false
  return true
}

Array.prototype.any = function(f) { 
  for(var i=0;ithis.length;i++)  if (f(this[i])) return true
  return false
}

Array.prototype.grep = function(regex,f) { 
  var arr=[]
  for(var i=0;ithis.length;i++){
     if (this[i].toString().match(regex)) arr.push((f || function(x){return x})(this[i]))
  }  
  return arr
}

Array.prototype.include = function(v) { 
  for(var i=0;ithis.length;i++)  if (this[i]==v) return true
  return false
}
Array.prototype.indexOf = function(v) { 
  for(var i=0;ithis.length;i++)  if (this[i]==v) return i
  return -1
}

Array.prototype.inject = function(v,f) { 
  var vv=v
  for(var i=0;ithis.length;i++)  vv=f(vv,this[i])
  return vv
}

Array.prototype.max=function(){
  var v=this[0];
  for(var i=0;ithis.length;i++)  if (this[i]v) v=this[i]
  return v
}

Array.prototype.min=function(){
  var v=this[0];
  for(var i=0;ithis.length;i++)  if (this[i]v) v=this[i]
  return v
}

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

/script
textarea id=o
这里有很多文本和script块,而且script块的数目不定
scriptalert(1)/script
script
function fff(){
alert("fff function")
}
fff()/script
scriptalert("last alert()")/script
/textarea

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

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

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

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


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


//这个例子比较常用,比如用ajax抓了一个页面,怎么执行页面中的所有script块呢?
var f=function(s){return s.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(var i=0;ithis.length;i++)  if (f(this[i])) return this[i]
  return null
}

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

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

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

/script

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

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

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

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

var b=arr.all(function(x){return x%2==0})  //检查是不是数组中所有元素都是偶数
var c=arr.any(function(x){return x%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(var i=0;iarguments.length;i++){
             this [this.length]  =  arguments[i];
        }
         return this.length;
    }
}

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


来源:https://www.tulaoshi.com/n/20160219/1599369.html

延伸阅读
蘑菇简笔画视频教程 先放上蘑菇简笔画的视频,跟着视频做,视频后还有步骤可以跟着做,画完之后你一定觉得是特别的容易。画了之后尽量的反复画来培养自己的动手能力吧。     蘑菇简笔画步骤教程 1、首先画出蘑菇的大致形状 2、在蘑菇里画一个弧形 3、画出蘑菇的梗 4、然后画出蘑菇的花纹,也可以画出其他的花纹...
蛇简笔画的视频教程    蛇简笔画的视频教程 1、画一个圆作为蛇的一个眼睛。 2、再用同样的方法画出另外一个眼睛,眼睛一大一小会显得可爱。并画出黑色的眼球。 3、在眼球里画出眼白。 4、接下来画出蛇的脸。 5、在画出蛇的舌头 6、再就是画蛇的身体了。要画出蛇的哪种弧度。 7、补全蛇的尾巴。 8...
    本程序可加到用户的源程序之前,起到加锁的作用。本程序的特点是: 口令保密性强(保存于文件KLK.CFG中,此文件名也可由用户重新命名),而 且用户可随时修改口令。在程序中当用户输入口令后,系统首先测试口令文 件KLK.CFG是否存在(只有用户运行了修改口令子函数后才会生成口令文件, 否则系统只认...
/***********简单的时钟程序,界面不是很美观,您可以根据自己的爱好加以修改,如给表盘加上刻度,将指针改为其它外形等*/#includegraphics.h #includemath.h #includedos.h#define PI 3.1415926 #define x0 320    /*定义钟表中心坐标*/ #define y0 240void DrawClock(int x,int y,int color)   /*画...
标签: Web开发
在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建XMLHttpRequest对象什么的,这部分代码也是重用性比较高的~已经打包,在日志的末尾下载。 要看效果的话点开侧边栏里的日志搜索,里面有一个无刷新搜索,就是了,或者在阅读日志或...

经验教程

731

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部