Array--Good parts

js数组没有上届

--如果你用大于或等于当前length的数字作为下标来存储一个元素,那么length会被增大以容纳新元素,不会发生数组越界。

数组也是对象

--可以添加属性。a["name"]="sjr",但是length 不变。length属性是这个数组的最大整数属性名加上1。设置length的值,设置更大不会给数组分配更多的空间,设置更小会移除多余元素。
--可以用for in 来遍历一个数组的所有属性。但是for in 无法保证属性的顺序。此外,可能从原型链中得到意外属性的问题依然存在。常规的for循环可以避免这些问题。
--对象没有length属性。
--使用数组还是对象:当属性名是小而连续的整数时,使用数组。否则,使用对象。
--区分数组和对象:js没有一个好的机制来区别数组和对象。我们可以自己对象isArray来弥补这个缺陷。

  var isArray = function(value){
           return value && typeof value === 'object' && value.constructor === Array;
       }

  遗憾的是,它在识别从不同的窗口(window)或帧(frame)里构造的数组时会失败。有一个更好的方式去判断一个对象是否为数组。
  全兼容滴
     
  var isArray = function(value){
        return Object.prototype.toString.apply(value) === '[object Array]';
    }

--给数组添加方法

   Function.prototype.method = function(name,func){
     if(!this.prototype[name]){
         this.prototype[name] = func;
     }
       return this;
   }; 
    Array.method = function(f,value){
        var i;
        for(i = 0; i < this.length; i += 1){
            value = f(this[i], value);
        }
        return value;
    }
  var add=function(a,b){
     return a+b;}
  var a=[1,2,3]
  a.reduce(add,5)
  //11

数组其实就是对象,我们可以直接给一个单独的数组添加方法。

  data.total = function(){
        return this.reduce(add, 0);
    }
    total = data.total()

因为'total'不是整数,所以给数组增加一个total属性不会改变它的length。当属性名是整数时,数组才是最有用的,但它们依旧是对象,并且对象可以接受任何字符串作为属性名。

给数组指定初始值

--一维数组:JS数组不会预置值,如果你用[]得到一个新数组,它将是空的。元素是undefined。如果你实现的算法是假设每个元素都从一个已知的元素开始(例如0),那么你必须自己准备好这个数组。

  Array.dim = function(demi,value){
        var a = [];
        for(var i = 0; i < demi; i++){
            a[i] = value
        }
        return a;
    }
    Array.dim(10,0);

--二维数组:为了创建一个二维数组或者数组的数组,你必须自己去创建那个第二维的数组:

  for(i = 0; i < n; i++){
        my_array[i] = []
    }
  Array.matrix = function(m, n, initial){
        var a = [],mat = [];
        for(var i = 0; i < m; i++){
            for(var j = 0; j < n; j++){
                 mat[j] = initial;
            }
            a[i] = mat;
        }
        return a;
    }
  Array.matrix(2,3,0);
  //或者用dim去写
  Array.matrix = function(m,n,initial){
        var a = [];
        for(var i = 0; i < m; i++){
            a[i] = Array.dim(n,initial);
        }
        return a;
    };
posted @ 2015-04-11 20:29  darr  阅读(171)  评论(0编辑  收藏  举报