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 相关文章推荐
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
js判断上传文件的类型和大小示例代码
Oct 18 Javascript
js同比例缩放图片的小例子
Oct 30 Javascript
JavaScript中的函数模式详解
Feb 11 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
Aug 20 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
prototype1.4中文手册
2006/09/22 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
javascript每日必学之封装
2016/02/23 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
Python CSV模块使用实例
2015/04/09 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python实现最常见加密方式详解
2019/07/13 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
文员求职信
2014/07/15 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书