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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
Dec 12 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
jquery中$(#form :input)与$(#form input)的区别
Aug 18 Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
js点击选择文本的方法
Feb 09 Javascript
JS实现超精简响应鼠标显示二级菜单代码
Sep 12 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
原生js实现可爱糖果数字时间特效
Dec 30 Javascript
Vue 仿百度搜索功能实现代码
Feb 16 Javascript
利用Ionic2 + angular4实现一个地区选择组件
Jul 27 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基于单例模式实现的mysql类
2016/01/09 PHP
分享php多功能图片处理类
2016/05/15 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
js实现右键菜单功能
2016/11/28 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
详解Vue之事件处理
2020/07/10 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Django之PopUp的具体实现方法
2019/08/31 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
作弊检讨书1000字
2014/02/01 职场文书
应聘英语教师求职信
2014/04/24 职场文书
社区敬老月活动总结
2015/05/07 职场文书
python图像处理 PIL Image操作实例
2022/04/09 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL