2008/05/11 | 扩展Array类
类别(Flash习作) | 评论(0) | 阅读(102) | 发表于 03:02

模仿as3的Array,扩展as1,as2中Array类的功能
"extendArray.as"

Array.prototype.indexOf = function(value, num) {
 num = isNaN(num) ? 0 : num;
 for (var i = num; i<this.length; i++) {
  if (this[i] === value) {
   return i;
  }
 }
 return -1;
};
Array.prototype.lastIndexOf = function(value, num) {
 num = isNaN(num) ? 0 : num;
 for (var i = this.length-1; i>=num; i--) {
  if (this[i] === value) {
   return i;
  }
 }
 return -1;
};
//生成一个乱序的新数组
Array.prototype.randomization = function() {
 var arr = this.slice();
 var temp, ran;
 for (var i = 0; i<arr.length; i++) {
  temp = arr[i];
  ran = random(arr.length);
  arr[i] = arr[ran];
  arr[ran] = temp;
 }
 return arr;
};
//生成无重复元素的新数组
Array.prototype.noRepeat = function() {
 var arr = [this[0]];
 var i, j, isNew;
 for (i=0; i<this.length; i++) {
  isNew = true;
  for (j=0; j<arr.length; j++) {
   if (this[i] == arr[j]) {
    isNew = false;
    break;
   }
  }
  if (isNew) {
   arr.push(this[i]);
  }
 }
 return arr;
};
//遍历操作
Array.prototype.forEach = function(func, obj) {
 for (var i = 0; i<this.length; i++) {
  func.apply(obj, [this[i], i, this]);
 }
};
//过滤器:提取满足条件的元素组成新的数组
Array.prototype.filter = function(func, obj) {
 var arr = [];
 for (var i = 0; i<this.length; i++) {
  if (func.apply(obj, [this[i], i, this])) {
   arr.push(this[i]);
  }
 }
 return arr;
};
//映射器:对每个元素操作生成新数组的各个元素
Array.prototype.map = function(func, obj) {
 var arr = [];
 for (var i = 0; i<this.length; i++) {
  arr.push(func.apply(obj, [this[i], i, this]));
 }
 return arr;
};
//有一个满足则为真
Array.prototype.some = function(func, obj) {
 for (var i = 0; i<this.length; i++) {
  if (func.apply(obj, [this[i], i, this])) {
   return true;
  }
 }
 return false;
};
//全员满足才为真
Array.prototype.every = function(func, obj) {
 for (var i = 0; i<this.length; i++) {
  if (!func.apply(obj, [this[i], i, this])) {
   return false;
  }
 }
 return true;
};

1

评论Comments