zoukankan      html  css  js  c++  java
  • 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;
        };
  • 相关阅读:
    Qt状态机实例
    <STL> accumulate 与 自定义数据类型
    <STL> 容器混合使用
    散列表(C版)
    Canonical 要将 Qt 应用带入 Ubuntu
    <STL> set随笔
    C++ 文件流
    视频播放的基本原理
    <STL> pair随笔
    c++ 内存存储 解决char*p, char p[]的问题
  • 原文地址:https://www.cnblogs.com/darr/p/4418347.html
Copyright © 2011-2022 走看看