ArrayList类(增强版)


Posted in Javascript onApril 04, 2007

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

<script>  
function ArrayList()  
{  
  var ins = Array.apply(this, arguments);  
  ins.constructor = arguments.callee;  
  ins.base = Array;    ins.each = function(closure)  
  {  
    if(typeof closure == 'undefined')  
      closure = function(x){return x};  
    if(typeof closure != 'function')  
    {  
      var c = closure;  
      closure = function(x){return x == c}  
    }  
    var ret = new ArrayList();  
    var args = Array.apply(this, arguments).slice(1);  
    for(var i = 0; i < this.length; i++)  
    {  
      var rval = closure.apply(this, [this[i]].concat(args).concat(i))  
      if(rval || rval === 0)  
        ret.push(rval);  
    }  
    return ret;  
  }  
  ins.trim = function()  
  {  
    return this.each.apply(this);  
  }  
  ins.all = function(closure)  
  {  
    return this.each.apply(this, arguments).length == this.length;  
  }  
  ins.any = function(closure)  
  {  
    return this.each.apply(this, arguments).length > 0;  
  }  
  ins.contains = function(el)  
  {  
    return this.any(function(x){return x == el});  
  }  
  ins.indexOf = function(el)  
  {  
    var ret = this.each.call(this, function(x, i){return el == x?i:false})[0];  
    return ret ? ret : -1;  
  }  
  ins.subarr = function(start, end)  
  {  
    end = end || Math.Infinity;  
    return this.each.call(this, function(x, i){return i >= start && i < end ? x : null});  
  }  
  ins.valueOf = ins.toString;  
  ins.toString = function()  
  {  
    return '['+this.valueOf()+']';  
  }  
  ins.map = function(list, closure)  
  {  
    if (typeof list == 'function' && typeof closure != 'function')  
    {  
      var li = closure;  
      closure = list;  
      list = li;  
    }  
    closure = closure || ArrayList;  
    return this.each.call(this, function(x, i){return closure.call(this, x, list[i])});  
  };  
  ins.slice = function()  
  {  
    return this.constructor(ins.base.prototype.slice.apply(this, arguments));  
  }  
  ins.splice = function()  
  {  
    return this.constructor(ins.base.prototype.splice.apply(this, arguments));  
  }  
  ins.concat = function()  
  {  
    return this.constructor(ins.base.prototype.concat.apply(this, arguments));  
  }  
  return ins;  
}  
var a = new ArrayList(1,2,3);  
alert(a.length);  
alert(a);  
alert(a instanceof Array);  
alert(a.constructor);  
alert(a instanceof ArrayList); // 可惜这个值不对,但是没法实现,只好放弃了  
alert(a.each(function(x){return x+x}));  
alert(a.all(function(x){return x>0}));  
alert(a.all(function(x){return x<1}));  
alert(a.any(function(x){return x == 2}));  
alert(a.contains(2));  
alert(a.contains(-1));  
var b = a.map([3,2], function(x, y){return x+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());  
var b = new ArrayList(a,a);  
alert(b.toString());  
alert(b.slice(1));  
</script> 
arr.all 是当数组(集合)中的所有元素都满足条件时,返回true,否则返回false
arr.any 是当数组(集合)中的所有元素中任意一个满足条件时,返回true,如果都不满足,返回false
arr.each 返回由符合条件的每一个元素构成的子数组
arr.map 是匹配两个数组(集合)并把它们的元素用指定闭包进行计算 
Javascript 相关文章推荐
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
js闭包所用的场合以及优缺点分析
Jun 22 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
JavaScript错误处理和堆栈追踪详解
Apr 18 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
vue2单元测试环境搭建
May 24 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
vue-cli3环境变量与分环境打包的方法示例
Feb 18 Javascript
Node.js事件的正确使用方法
Apr 05 Javascript
JS实现判断数组是否包含某个元素示例
May 24 Javascript
Javascript中的数学函数
Apr 04 #Javascript
Some tips of wmi scripting in jscript (1)
Apr 03 #Javascript
记录几个javascript有关的小细节
Apr 02 #Javascript
新浪刚打开页面出来的全屏广告代码
Apr 02 #Javascript
js prototype 格式化数字 By shawl.qiu
Apr 02 #Javascript
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 #Javascript
新浪中用来显示flash的函数
Apr 02 #Javascript
You might like
解析php开发中的中文编码问题
2013/08/08 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python实现在pickling的时候压缩的方法
2014/09/25 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
银行介绍信范文
2014/01/10 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
四查四看自我剖析材料
2014/09/19 职场文书