• 廖雪峰JS教程学习记录---数组详解


    数组详解

    JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。

    要取得Array的长度,直接访问length属性:

    var arr = [1, 2, 3.14, 'Hello', null, true];
    arr.length; // 6
    

    请注意,直接给Arraylength赋一个新的值会导致Array大小的变化:

    var arr = [1, 2, 3];
    arr.length; // 3
    arr.length = 6;
    arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
    arr.length = 2;
    arr; // arr变为[1, 2]

    Array可以通过索引把对应的元素修改为新的值,因此,对Array的索引进行赋值会直接修改这个Array

    var arr = ['A', 'B', 'C'];
    arr[1] = 99;
    arr; // arr现在变为['A', 99, 'C']
    

    请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

    var arr = [1, 2, 3];
    arr[5] = 'x';
    arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
    

    大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript的Array却不会有任何错误。

    在编写代码时,不建议直接修改Array的大小,访问索引时要确保索引不会越界。

    初始化数组

    var a = new Array();
      var a = new Array(10);//10代表数组的长度
      var a = new Array('10');//初始化化数组,数组长度为1      

    数组读和写的方式

    读__a[a.length-1]//访问数组最后一项

    写 

    a[100] = 0//这时数组的长度为100,没有初始化的默认值为undefined

     

                                                                              数组方法

    1.栈方法(后进先出)

    push()=>接收/任意数量的参数/,把它们逐渐添加到数组/末尾/,并返回修改后/数组的长度/(后进)
    pop()=>数组末尾移除/最后一项/,减少数组的length值,然后返回/移除的项/(先出)

    push()方法----返回值为:数组的新长度

    pop()方法----返回值为:删除的那个元素,空数组不报错,返回undefined

    var arr = [1, 2];
    arr.push('A', 'B'); // 返回Array新的长度: 4
    arr; // [1, 2, 'A', 'B']
    arr.pop(); // pop()返回'B'
    arr; // [1, 2, 'A']
    arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
    arr; // []
    arr.pop(); // 空数组继续pop不会报错,而是返回undefined
    arr; // []

    2.队列方法(先进先出)

    unshift()=>接收任意数量的参数,把它们逐渐添加到数组/前端/,并返回修改后/数组的长度/(先进)
    shift()=>移除数组中的/第一个项/,减少数组的length值,并返回/移除的项/(先出)

    unshift()方法返回值----数组的新长度
    shift()方法返回值----删除的元素,空数组不报错,返回undefined
    var arr = [1, 2];
    arr.unshift('A', 'B'); // 返回Array新的长度: 4
    arr; // ['A', 'B', 1, 2]
    arr.shift(); // 'A'
    arr; // ['B', 1, 2]
    arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
    arr; // []
    arr.shift(); // 空数组继续shift不会报错,而是返回undefined
    arr; // []

    3.indexOf

    与String类似,Array也可以通过indexOf()来搜索一个指定的元素的位置:

    返回值为指定元素的索引值,当未找到返回值为-1

    arr.indexOf(20); // 元素20的索引为1
    arr.indexOf(30); // 元素30没有找到,返回-1
    
    

    4.splice

    splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

    第一个参数指定起始位置
    第二个参数指定要删除的项数
    第三个以及后面的参数要插入的项

    返回值----删除的元素,未删除元素时返回[]

    var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
    // 从索引2开始删除3个元素,然后再添加两个元素:
    删除时注意:直接从给定的索引值当前删除,千万不要惯性思维,从给定值的下一个算,那是错误的
    arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite'] arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle'] // 只删除,不添加: arr.splice(2, 2); // ['Google', 'Facebook'] arr; // ['Microsoft', 'Apple', 'Oracle'] // 只添加,不删除: arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素 arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

    5.slice

    slice()就是对应String的substring()版本,它截取Array的部分元素

    返回值为一个新的Array

    var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
    arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
    arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
    

    注意到slice()的起止参数包括开始索引,不包括结束索引。

    如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array

    var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
    var aCopy = arr.slice();
    aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
    aCopy === arr; // false
    因为aCopy是克隆出来的新对象,哪怕数组中的元素一模一样,但aCopy跟arr都是两个对象,两个对象又不是指向同一块内存空间,所以不相等

    6.sort

    默认情况下sort()方法按升序排列数组项,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort()方法比较的也是字符串。
    因此sort()方法可以接收一个比较函数作为参数,以便我们指定那个位置位于那个位置前面。比较函数接收两个参数,如果第一个参数位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数位于第二个参数之后则返回一个正数。由于比较函数通过返回一个小于0、等于0或大于0的值来影响排序结果,因此减法操作就可以适当的处理所有情况。

    返回值----变化后的数组

    重排序方法(默认升序<0)==>
    a.sort(function(value1,value2){return value1-value2})

    var a = ['ab','bc','abc'];
    a.sort()//['ab','abc','bc'];
    --------------------------------------------
    var a = [2,20,3];
    a.sort()//[2, 20, 3](20转换为字符串)
    --------------------------------------------
    var a = ['ant','Bug','cat','Dog'];
    a.sort()//["Bug", "Dog", "ant", "cat"](大写字母排前面)
    a.sort(function(a,b){a.toLowerCase()<b.toLowerCase()})//["ant", "Bug", "cat", "Dog"]

    7.reverse

    reverse()把整个Array的元素给掉个个,也就是反转:

    返回值----变化后的数组

    8.concat

    concat()方法把当前的Array和另一个Array连接起来

    返回值----一个新的Array

    
    

    请注意concat()方法并没有修改当前Array,而是返回了一个新的Array

    实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

    var arr = ['A', 'B', 'C'];
    arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]

    9.join

    join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串

    var arr = ['A', 'B', 'C', 1, 2, 3];
    arr.join('-'); // 'A-B-C-1-2-3'
    

    如果Array的元素不是字符串,将自动转换为字符串后再连接。

    多维数组

    如果数组的某个元素又是一个Array,则可以形成多维数组,例如:

    var arr = [[1, 2, 3], [400, 500, 600], '-'];
    

    上述Array包含3个元素,其中头两个元素本身也是Array

    通过索引取到500这个值:arr[1][1];

     
  • 相关阅读:
    String类源码解析之理解indexOf函数--转载
    SQL优化--转载
    通过cmd/批处理 开启关闭windows中的mysql数据库
    windows查看连接过wifi的密码
    Java Annotation认知(包括框架图、详细介绍、示例说明)--转载
    springboot加载配置文件的优先级
    SpringBoot项目创建的三种方式
    雷总小米十周年演讲---国外友人评价第一次看到MIUI系统
    装饰器模式
    嵌套的setTimeout
  • 原文地址:https://www.cnblogs.com/shiliu123456/p/5706187.html
Copyright © 2020-2023  润新知