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单词形式的运算符
May 06 Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
Dec 02 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
BOM系列第二篇之定时器requestAnimationFrame
Aug 17 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
js实现翻牌小游戏
Jul 31 Javascript
swiper4实现移动端导航栏tab滑动切换
Oct 16 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php开发工具有哪五款
2015/11/09 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
PHP 实现缩略图
2021/03/09 PHP
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
简化版的vue-router实现思路详解
2018/10/19 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python高斯消除矩阵
2019/01/02 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
电大物流学生的自我评价
2013/10/25 职场文书
大学毕业生简单自荐信
2013/11/05 职场文书
社区平安建设方案
2014/05/25 职场文书
卫生标语大全
2014/06/21 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
行政上诉状范文
2015/05/23 职场文书
小组口号霸气押韵
2015/12/24 职场文书