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 相关文章推荐
jquery ajax执行后台方法
Mar 18 Javascript
jquery 模板的应用示例
Nov 12 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 Javascript
使用Sonarqube扫描Javascript代码的示例
Dec 26 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 Javascript
JavaScript实现alert弹框效果
Nov 19 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中heredoc的使用方法
2013/06/17 PHP
php文件上传的两种实现方法
2016/04/04 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP实现简单登录界面
2019/10/23 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
分析Python中解析构建数据知识
2018/01/20 Python
Python 元类实例解析
2018/04/04 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python 实现字符串下标的输出功能
2020/02/13 Python
Python request使用方法及问题总结
2020/04/26 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
物流管理应届生求职信
2013/11/07 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
详解python网络进程
2021/06/15 Python