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原型对象通俗&quot;唱法&quot;
Dec 27 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
js中变量的连续赋值(实例讲解)
Jul 08 Javascript
bootstrap基本配置_动力节点Java学院整理
Jul 14 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
小程序实现搜索框
Jun 19 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 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将数据导入到Foxmail
2006/10/09 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
js实现收缩菜单效果实例代码
2013/10/30 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
Python面向对象之继承代码详解
2018/01/29 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
详解python Todo清单实战
2018/11/01 Python
NumPy排序的实现
2020/01/21 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
详解python的变量缓存机制
2021/01/24 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
当当网软件测试笔试题
2015/11/24 面试题
工业设计专业个人求职信范文
2013/12/28 职场文书
董事长秘书职责
2014/01/31 职场文书
天网工程实施方案
2014/03/26 职场文书
夫妻吵架保证书
2015/05/08 职场文书
2016年情人节问候语
2015/11/11 职场文书