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 相关文章推荐
在textarea中显示html页面的javascript代码
Apr 20 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
javascript面向对象快速入门实例
Jan 13 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
c#程序员对TypeScript的认识过程
Jun 19 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
详解React 16 中的异常处理
Jul 28 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
Apr 21 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
详解基于mpvue微信小程序下载远程图片到本地解决思路
May 16 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
php&amp;java(一)
2006/10/09 PHP
信用卡效验程序
2006/10/09 PHP
php文件缓存类汇总
2014/11/21 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python中文件操作简明介绍
2015/04/13 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python redis存入字典序列化存储教程
2020/07/16 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
golang/python实现归并排序实例代码
2020/08/30 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python如何实现图片压缩
2020/09/11 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
应聘编辑职位自荐信范文
2014/01/05 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
测控技术自荐信
2014/06/05 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
教导处教学工作总结
2015/08/12 职场文书
Django cookie和session的应用场景及如何使用
2021/04/29 Python