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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
Javascript实现滚动图片新闻的实例代码
Nov 27 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
ASP.NET jquery ajax传递参数的实例
Nov 02 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
JavaScript设计模式之建造者模式实例教程
Jul 02 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
express如何解决ajax跨域访问session失效问题详解
Jun 20 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
2019十大人气国漫
2020/03/13 国漫
PHP 命名空间实例说明
2011/01/27 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
PHP如何使用Memcached
2016/04/05 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
python处理json数据中的中文
2014/03/06 Python
Python设计模式之观察者模式实例
2014/04/26 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
装修设计师求职信
2014/02/26 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers