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 相关文章推荐
用示例说明filter()与find()的用法以及children()与find()的区别分析
Apr 26 Javascript
5秒后跳转到另一个页面的js代码
Oct 12 Javascript
浅谈JavaScript中运算符的优先级
Jul 07 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
Aug 21 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
快速解决js开发下拉框中blur与click冲突
Oct 10 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 Javascript
vue学习笔记之作用域插槽实例分析
Feb 01 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
nodejs教程之入门
2014/11/21 NodeJs
javascript实现信息增删改查的方法
2015/07/25 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
python标准算法实现数组全排列的方法
2015/03/17 Python
Python编程中字符串和列表的基本知识讲解
2015/10/14 Python
Python操作MongoDB详解及实例
2017/05/18 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python学生管理系统开发
2019/01/30 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
高中数学教学反思
2014/01/30 职场文书
教师职称自我鉴定
2014/02/12 职场文书
小学安全教育材料
2014/02/17 职场文书
音乐教学随笔感言
2014/02/19 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
公司酒会致辞
2015/07/30 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏