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 相关文章推荐
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 Javascript
js window对象属性和方法相关资料整理
Nov 11 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
简述Matlab中size()函数的用法
Mar 20 Javascript
Angular4 中内置指令的基本用法
Jul 31 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
react中使用css的7中方式(最全总结)
Feb 11 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP获取网卡地址的代码
2008/04/09 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
php共享内存段示例分享
2014/01/20 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
nginx 设置多个站跨域
2021/03/09 Servers
pjblog修改技巧汇总
2007/03/12 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
Python中os和shutil模块实用方法集锦
2014/05/13 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
自动化专业毕业生自荐信
2013/11/01 职场文书
中班幼儿评语大全
2014/04/30 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
公司酒会致辞
2015/07/30 职场文书
商务宴会祝酒词
2015/08/11 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
Vue3中的Refs和Ref详情
2021/11/11 Vue.js