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 相关文章推荐
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
Dec 11 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
Aug 18 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
Nov 07 Javascript
jQuery序列化表单成对象的简单实现
Nov 29 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
Sep 27 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
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php5.3 注意事项说明
2013/07/01 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
17个Python小技巧分享
2015/01/23 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
django 将model转换为字典的方法示例
2018/10/16 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
实现向右循环移位
2014/07/31 面试题
银行会计财务工作个人的自我评价
2013/10/29 职场文书
学前教育专业求职信
2014/09/02 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
企业年检委托书范本
2014/10/14 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python