zoukankan      html  css  js  c++  java
  • javascript数组

    数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。

    javascript数组的元素可以是任意类型,也可以是对象或其他数组。索引是基于零的32位数值:第一个元素的索引为0,最大可能的索引为4294967294。

    1、创建数组

      一、使用数组直接量,在方括号中将数组元素用逗号隔开;
      var empty = [];
      var numList = [2, 3, 5, 11, 89];
      var zz = [1.1, "a", false];
      如果省略数组直接量中的某个值,省略的元素将被赋予undefined值;
      二、调用构造函数Array()
      var a = new Array(); 创建一个没有任何元素的空数组,等同于直接量[]
      var b = new Array(10); 有一个数值参数,指定了数组长度
      var c = new Array(1, 2, 5, "aa"); 显示的指定数组元素

    2、数组的读取和写入

      使用[]操作符可以访问数组中的一个元素。方括号中间是一个非负整数的任意表达式。方括号左边是数组的引用。

      数组是对象的特殊形式,使用方括号访问数组元素就像用方括号访问对象的属性一样。javascript将指定的数组索引值转变成字符串,然后作为属性名来使用。

    3、数组的长度

      a.length;每个数组都有length属性,该属性值代表数组中元素的个数,该值比数组中最大的索引大1。(前提条件该数组为非稀疏数组)

      稀疏数组:包含从0开始的不连续索引的数组。所以,数组的length值大于元素的个数。可以用Array()构造函数或简单地指定数组的索引值大于当前的数组长度来创建稀疏数组。

      var a = new Array(5);//数组没有元素,但是a.length是5;

      var a = [];

      a[100] = 0;//创建一个空数组,length为0,赋值添加一个元素,但是设置length为100。

      但是在数组直接量中省略值不会创建稀疏数组,因为省略的元素在数组中是存在的,其值为undefined

      数组有两个特殊的行为:一、如果为一个数组元素赋值,它的索引大于或等于现有数组的长度时,length属性值将+1;二、设置length属性为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将从中删除。

    4、数组元素的添加和删除

      添加数组最简单的方法:给新索引赋值var a = []; a[0] = "zero";

      或者push()方法在数组末尾增加一个或多个元素

      var a = [];

      a.push("one");

      a.push("one", "two");

      也可以使用unshift()方法在数组首部插入一个元素。

      删除数组元素于为其赋值undefined值是类似的。对一个数组元素使用delete不会修改数组的length属性,也不会将元素从高索引移下来填充已删除留下来的空白。如果从数组中删除一个元素,它变成稀疏数组。

    5、数组常用方法

      Array.join()方法将数组中所有元素都转换成字符串并连接在一起,返回最后生成的字符串。可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素。如果不指定分隔符,默认使用逗号。

      

        var a = [1, 2, 3];
        console.log(a.join());//1,2,3
        console.log(a.join(" "));//1 2 3
        console.log(a.join(""));//123
        var b = new Array(9);
        console.log(b.join("-"));//--------

      Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组。(只是在原数组中重新排列)。

    var a = [1, 2, 3, 11, 222, "a"];
    console.log(a.reverse());

      Array.sort()方法将数组中的元素排序并返回排序后的数组。当不带参数调用sort()时,数组元素以字母表顺序排序,如果数组中包含undefined元素,它们会被排到数组的尾部。

      如果想按照其它方式而非字母顺序进行排序,必须给sort()方法传递一个比较函数。该函数决定了它的两个参数在排好序的数组中的先后顺序。假设第一个参数应该在前,那么比较函数应该返回一个小于0的数值。反之,假设第一个参数应该在后,函数应该返回一个大于0的数值。并且,假设两个值相等,也就是说它们的顺序无关紧要,函数应该返回0。

      使用数值大小进行数组排序:

    var a = [33, 222, 9, 7777];
        console.log(a.sort());//[222, 33, 7777, 9]
        console.log(a.sort(function(a, b) {
        return a-b;
        })); //[9, 33, 222, 7777]

      对字符串数组执行不区分大小写的字母表排序:

    var a = ["ant", "Bub", "cat", "Dog"];
    console.log(a.sort());//["Bub", "Dog", "ant", "cat"]
    console.log(a.sort(function(s, t) {//不区分大小写的排序
        var a = s.toLowerCase(),
        b = t.toLowerCase();
        if(a < b) {
            return -1;
        }else if(a > b) {
            return 1;
        }else {
            return 0;
        }
    }));//["Bub", "Dog", "ant", "cat"]

      Array.concat()方法创建并返回一个数组,它的元素包含调用concat()的原始数组及concat()的每个参数。如果这些参数中的任何一个是数组,则连接的是数组的元素,而不是数组本身。

    var a = [1, 2, 3];
        console.log(a.concat(4, 5));// [1, 2, 3, 4, 5]
        console.log(a.concat([4, 5])); // [1, 2, 3, 4, 5]
        console.log(a.concat([4, 5], [6, 7]));// [1, 2, 3, 4, 5, 6, 7]
        console.log(a.concat(4, [5, [6, 7]]));// [1, 2, 3, 4, 5, [6, 7]]

      Array.slice()方法返回指定数组的一个片段或子数组。它的两个参数分别指定了片段开始和结尾的位置,但获取的数组不包含结尾位置的值。如果只有一个参数那么第二个默认为数组的最后一个元素位置。如果参数中出现负数,它表示相对于数组中最后一个元素的位置。

    var a = [1, 2, 3, 4, 5];
        console.log(a.slice(0, 3)); // [1, 2, 3]
        console.log(a.slice(3)); //[4, 5]
        console.log(a.slice(1, -1));// [2, 3, 4]
        console.log(a.slice(-3, -2));//[3]

      Array.splice()方法在数组中插入或删除元素的通用方法。
      第一个参数指定了插入或删除的起始位置,第二个参数指定了应该从数组中删除的元素的个数,如果省略第二个参数,从起始点到数组结尾的所有元素都将被删除。之后的参数指定了需要插入到数组中的元素,从第一个参数指定的位置开始插入。

    var a = [1, 2, 3, 4, 5, 6];
        console.log(a.splice(4));// [5, 6]
        console.log(a);// [1, 2, 3, 4]
        console.log(a.splice(1, 2)); //[2, 3]
        console.log(a);// [1, 4]
    
        var b = [1, 2, 4, 3, 5, 6];
        console.log(b.splice(2, 0, "a", "b"));//[]
        console.log(b);//[1, 2, "a", "b", 4, 3, 5, 6]

      push()和pop()方法允许将数组当做栈来使用。

      push()方法在数组的结尾添加一个或多元素,并返回数组新的长度。

      pop()方法删除数组最后一个元素,减小数组的长度并返回它删除的值。

    var stack = [];
        console.log(stack.push(1, 2));// 2
        console.log(stack);// [1, 2]
        console.log(stack.pop());// 2
        console.log(stack);//[1]

      unshift()和shift()方法类似push()和pop(),不一样的是前者是在数组的头部进行元素的插入和删除操作。

      unshift()方法在数组的头部添加一个或多个元素,并将已存在的元素移动到更高索引的位置来获得足够的空间,最后返回数组新的长度。

      shift()方法删除数组的第一个元素并将其返回,然后把所有随后的元素下移个位置来填补头部的空缺。

    var stack = [];
        console.log(stack.unshift(1, 2));// 2
        console.log(stack);// [1, 2]
        console.log(stack.shift());// 1
        console.log(stack);//[2]

      toString()方法将数组每个元素转化为字符串,并且输出用逗号分割的字符串列表。

      console.log([1, 2, 3].toString());

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/wanbi/p/4240328.html
Copyright © 2011-2022 走看看