• 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;
        };
  • 相关阅读:
    Eclipse创建Python工程
    MySQL python安装
    pip安装-python2.7.15
    接口测试-HTTP重点知识及 测试工具
    接口测试-基础
    关闭win10的自动更新功能
    高版本MySQL(5.7,5.8)的JDBC连接新问题
    错误:java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
    Idea SpringBoot工程提示 "Error running 'xxxx'": Command line is too long... 问题解决
    错误:23:36:21.161 [main] ERROR org.springframework.boot.SpringApplication
  • 原文地址:https://www.cnblogs.com/darr/p/4418347.html
Copyright © 2020-2023  润新知