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 相关文章推荐
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
js更优雅的兼容
Aug 12 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
Oct 28 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
Feb 28 Javascript
JS通过位运算实现权限加解密
Aug 14 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
在Python中使用列表生成式的教程
2015/04/27 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python之web模板应用
2017/12/26 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
三维科技面试题
2013/07/27 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
小学生安全责任书
2014/07/25 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
给校长的一封检讨书
2014/09/20 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
五年级小学生评语
2014/12/26 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
孔繁森观后感
2015/06/10 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python