源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ArrayList类(增强版)

  • 时间:2020-03-14 07:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ArrayList类(增强版)
Author:月影 From:http://bbs.51js.com/thread-66469-1-1.html
[u]复制代码[/u] 代码如下:
<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 是匹配两个数组(集合)并把它们的元素用指定闭包进行计算 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部