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 相关文章推荐
Code:loadScript( )加载js的功能函数
Feb 02 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
js原型链原理看图说明
Jul 07 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
Jun 28 Javascript
Javascript delete 引用类型对象
Nov 01 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
Aug 16 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
import与export在node.js中的使用详解
Sep 28 Javascript
js读取本地文件的实例
Dec 22 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
使用node.js实现微信小程序实时聊天功能
Aug 13 Javascript
js实现有趣的倒计时效果
Jan 19 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异步调用socket实现代码
2012/01/12 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
Jquery实现的角色左右选择特效
2014/05/21 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
中专自我鉴定范文
2013/10/16 职场文书
毕业生自我推荐
2013/11/04 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
2015年酒店工作总结
2015/04/28 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
业余无线电通联Q语
2022/02/18 无线电