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 相关文章推荐
推荐9款炫酷的基于jquery的页面特效
Dec 07 Javascript
jQuery源码解读之removeAttr()方法分析
Feb 20 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
Apr 12 Javascript
JS实现全屏的四种写法
Dec 30 Javascript
如何解决vue与传统jquery插件冲突
Mar 20 Javascript
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
vue引用js文件的多种方式(推荐)
May 17 Javascript
Angular如何在应用初始化时运行代码详解
Jun 11 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 Javascript
vue Element左侧无限级菜单实现
Jun 10 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的五种设计模式
2012/09/05 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP输出日历表代码实例
2015/03/27 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
大学生职业生涯规划书参考模板
2014/03/05 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
公务员诚信承诺书
2014/05/26 职场文书
元旦标语大全
2014/10/09 职场文书
爱情保证书
2015/01/17 职场文书
困难补助申请报告
2015/05/19 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
常住证明范本
2015/06/23 职场文书
红与黑读书笔记
2015/06/29 职场文书
中学音乐课教学反思
2016/02/18 职场文书
女性励志书籍推荐
2019/08/19 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL