zoukankan      html  css  js  c++  java
  • Javascript高级程序设计--读书笔记之Array类型

    1.数组的lenght属性

    数组的lenght属性很有特点---他不是只读的,可以同过修改这个属性来向数组的末尾添值加或删除值,

    删除值

    var color = ["red", "blue", "green"];
    color.length = 2;
    alert(color[2]);           //undefined

    新增值

    var colors = ["red", "blue", "green"];
    colors[colors.length] = “black”;       //在位置3添加一种新颜色
    colors[colors.length] = "brown";      //在位置4添加一种新颜色
    colors[99] = "black";
    alert(colors.length);  //100

    数组的最后一项的索引始终都是lenght-1,因此下一个新项的位置就是length,每当数组的长度发生变化时其length属性的值就会重新更新,长度值等于最后一项的索引加1,在上一个例子中,位置3到位置89都是不存在的,所以访问他们都将返回undefined,数组最多可以包含4294967295个项,如果超过这个上线就会发生异常,创建一个与这个值相近的数组,可能导致运行时间超长的脚本错误,

    2.栈方法

    栈是一种LIFPO(Last-In-Fast-Out,后进先出),最新添加的项被最早移除,ECMAScript为数组专门设计push()和pop()方法实现类似栈的行为

    push()方法接受任意数量的参数,把他们添加到数组的末尾,并返回修改数组的长度,pop()数组末尾移除最后一项减少数组的length值,返回移除的项

    3.队列方法

    队列的访问规则是FIFO(Fast-In-Fast-Out,先进先出)实现这一操作方法就是shift()和push(),shift()能移除数组的第一项并返回该项,ECMAScript还为数组提供了一个unshift()顾名思义与shift()相反在数组前添加任意项并返回新长度。

    3.重排方法

    reveres()和sort() ,    reveres()会反转数组项的顺序,

    var values = [1, 2, 3, 4, 5];
    values.reverse();
    alert(values);      //5, 4, 3, 2, 1

    sort()在默认的情况下会按升序排列数组项,sort()会对每一项调用 toString(),然后比较字符串确定如何排序,即使数组的每一项都是数值,最终比较的也是字符串

    var values = [0, 1, 5, 10, 15];
    values.sort();
    alert(values);     //0, 1, 10, 15, 5

    sort()可以接受一个比较函数作为参数,如果第一个参数位于第二个参数之前则返回一个负数,如果两个参数相等则返回零,如果第一个参数位于第二个之后则返回一个正数,

    function compare(value1, value2){
       if(value1>value2){
          return -1;  
        }else if( value2<value1){
           return  1
        }else{
          return 0
      }
    }

     4.操作方法

    concat()方法可以基于当前数组项创建一个新数组,,在没有传递参数的情况下他只是复制当前数组并返回副本,如果传递给concat()一个或多个数组,该方法会将这些数组的每一项都添加到结果数组中,如果传递的不是数组就会简单的添加到结果数组的末尾

    1 var color = ["red", "green", "blue"];
    2 colors = color.concat("yellow", ["black", "brown"]);
    3 alert(color);       //red,green,blue
    4 alert(colors);      //red,green,blue,yellow.black,brown

    下一个方法是slice(),他能基于当前数组一个或多个项创建一个新数组,接受两个参数,返回项的起始位置和结束位置,但不包括结束位置的项,在只有一个参数的情况下只有一个参数的情况下返回指定位置到数组结束的所有项,

    var colors = ["red", "green", "blue", "black"];
    var colors1 = colors.slice(1);
    var colors2 = colors.slice(1,2);
    alert(colors1);      //green, blue, black
    alert(color2);       //green

    如果slice()方法中有一个是负数则用数组的长度加上该数来确定相应的位置,例如在一个包含5项的数组中调用slice(-2, -1),与调用slice(3,4)的结果相同,如果结束为重小于起始位置则返回空数组

    splice()  方法可以说是数组里最强大的一个方法了,主要的用途是向数组的内部插入项,但是使用这种方法的方式有三种,

    删除:可以删除任意数量的项只需指定两个参数要删除的第一项的位置和要删除的项数,例如:splice(0,2)会删除数组的前两项。

    插入:可以向指定的位置插入任意数量的项,只需指定三个参数,起始位置,0(要删除的项数)和要插入的项,如果要插入多个项,可以在向里传第四、第五,以至任意多个项,例如splice(2,0,"red", "green"),会从当前数组的位置2插入字符串“red”,"green".

    替换:可以向指定的位置插入任意数量的项,,并且同时删除任意数量的项,只需指定三个参数,起始位置要删除项数和要插入的任意数量的项,插入的项数不必与删除的项数相同,例如splice(2,1,"green","red"),会删除数组位置的第二项,并在位置2开始插入字符串“green”,"red"

    splice()方法始终返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项则返回空数组),看代码

    var colors = ["red", "green", "blue"];
    var removed = colors.splice(0,1)      //删除第一项
    alert(colors);                            //green blue
    alert(removed);                       //red 返回的数组只包含一项
    
    removed = colors.splice(1,0,"yellow", "orange");     //从1的位置开始插入两项
    alert(colors);                          //green,yellow,orange,blue
    alert(removed);                      // 返回一个空数组
    
    removed = colors.splice(1,1,"red","purple");  //插入两项删除一项
    alert(colors);                          //green,red,purplr,orange,blue
    alert(removed);                     //yellow

    一句话总结splice()方法, 接受“三个”参数,起始位置, 要删除的项数(可以为0不删除),要插入的值(任意项)

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/Qqqing/p/10146691.html
Copyright © 2011-2022 走看看