数组

1909 字
10 分钟
数组
  • 数组也是一个对象
  • 普通对象是使用字符串作为属性名的,而数组时使用数字来作为索引操作元素
  • 数组中的元素可以是任意的数据类型,可以是对象

创建数组#

- 声明或创建一个不指定长度的数组
var arr = new Array();
- 声明或创建一个指定长度的数组
var arr = new Array(10); //创建一个length为10的数组,没有值
- 声明或创建一个带有默认值的数组
var arr = new Array(1, 2, 3); //length为3,值为[1, 2, 3]
- 使用字面量创建数组
var arr = [1, 2, 3, 4, 5] //length为5,值为[1, 2, 3, 4, 5]
//创建不定长度的数组
var arr2 = [];
  • 读取数组中的元素

    • 语法: 数组[索引] arr[2]
    • 如果读取不存在的索引,他不会报错而是返回undefined
  • length

    • length是数组的一个属性,代表数组的长度

    • 获取数组的长度

      • 可以使用length属性来获取数组的长度(元素的个数)

      • 语法: 数组.length

        var arr=[1,2,3]; //arr.length = 3;
        console.log(arr.length);//输出数组长度
      • 对于连续的数组,使用length可以获取到数组的长度(元素的个数)

      • 对于非连续的数组,使用length会获取到数组的最大的索引+1

      • 尽量不要创建非连续的数组

    • 修改length

      • 如果修改的length大于原长度,则多出部分会空出来
      • 如果修改的length小于原长度,则多出的元素会被删除,所以可以修改length的长度为0来让数组为空
    • 向数组的最后一个位置添加元素

      • 语法: 数组[数组.length] = 值;

        arr[arr.length] = 10;

数组的方法#

push()#

- 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
- 可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾
- 该方法会将数组新的长度作为返回值返回
var arr = [1, 2, 3];
var result = arr.push(0);//arr = [1, 2, 3, 4], result = 4

pop()#

  • 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回 var arr = [1, 2, 3]; var result = arr.pop(); // result = 3, arr = [1, 2]

unshift()#

  • 向数组开头添加一个或多个元素,并返回新的数组长度
  • 向前边插入元素以后,其他的元素索引会依次调整 var arr = [1, 2, 3]; var result = arr.unshift(4, 5); // result = 5, arr = [ 4, 5, 1, 2, 3 ]

shift()#

  • 可以删除数组的第一个元素,并将被删除的元素作为返回值返回 var arr = [1, 2, 3]; var result = arr.shift(); // result = 1, arr = [2, 3]

slice()#

  • 可以用来从数组提取指定元素

  • 该方法不会改变元素数组, 而是将截取到的元素封装到一个新数组中返回 参数: 第一个,截取开始的位置的索引, 包含开始索引 第二个,截取结束的位置的索引, 不包含结束索引

    var arr = ["a", "b", "c", "d"];
    var result = arr.slice(2, 3); // result = [ 'c' ], arr = [ 'a', 'b', 'c', 'd' ]
    result = arr.slice(2); // result = [ 'c', 'd' ], arr = [ 'a', 'b', 'c', 'd' ]
  • 第二个参数可以省略不写, 此时会截取从开始索引往后的所有元素

  • 索引可以传递一个负值, 如果传递一个负值, 则从后往前计算 - 1 倒数第一个 - 2 倒数第二个

splice()#

- 可以用于删除数组中的指定元素,并向数组中添加新元素
- 使用splice()会**影响到原数组**,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回
- 参数:
- 第一个,表示开始位置的索引
- 第二个,表示删除的数量
- 第三个及以后。。
可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边
var arr = ["a", "b", "c", "d"];
var result = arr.splice(1,2); // result = [ 'b', 'c' ], arr = [ 'a', 'd' ]
var result = arr.splice(1, 2, "e", "f"); // result = [ 'b', 'c' ], arr = [ 'a', 'e', 'f', 'd' ]

concat()#

  • concat()可以连接两个或多个数组,并将新的数组返回

  • 该方法不会对原数组产生影响 var arr1 = [“a”, “b”, “c”]; var arr2 = [“1”, “2”, “3”];

    var result = arr1.concat(arr2); // result = [ 'a', 'b', 'c', '1', '2', '3' ]

join()#

  • 该方法可以将数组转换为一个字符串

  • 该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回

  • 在join()中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符,如果不指定连接符,则默认使用,作为连接符,如果指定为空,则会直接将字符连接 var arr1 = [“a”, “b”, “c”];

    var result = arr1.join();// result = a,b,c
    var result = arr1.join("@_&"); // result = a@_&b@_&c
    var result = arr1.join(""); // result = abc

reverse()#

  • 该方法用来反转数组(前边的去后边,后边的去前边)

  • 该方法会直接修改原数组 var arr1 = [“a”, “b”, “c”];

    var result = arr1.reverse();
    console.log(result); //result = [ 'c', 'b', 'a' ]
    console.log(arr1); // arr1 = [ 'c', 'b', 'a' ]

sort()#

  • 可以用来对数组中的元素进行排序

  • 也会影响原数组,默认会按照Unicode编码进行排序 //字符型数组 var arr1 = [“b”, “d”, “a”, “c”]; var result = arr1.sort(); console.log(result); //[ ‘a’, ‘b’, ‘c’, ‘d’ ] console.log(arr1); //[ ‘a’, ‘b’, ‘c’, ‘d’ ]

    //number型数组,以Unicode编码进行排序
    var arr2 = [2, 5, 7, 21, 13];
    var result = arr2.sort();
    console.log(result); //[ 13, 2, 21, 5, 7 ]
    console.log(arr2); // [ 13, 2, 21, 5, 7 ]
  • 对于number型数组,我们可以自己来指定排序的规则

    • 我们可以在sort()添加一个回调函数,来指定排序规则,回调函数中需要定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数

    • 浏览器会根据回调函数的返回值来决定元素的顺序:

      • 如果返回一个大于0的值,则元素会交换位置

      • 如果返回一个小于0的值,则元素位置不变

      • 如果返回一个0,则认为两个元素相等,也不交换位置

        var result = arr2.sort(function(a, b){
        /*
        if(a > b){
        return -1;
        }
        else if(a < b){
        return 1;
        }
        else{
        return 0;
        }
        /*
        return a - b;//升序,return b - a 则降序
        });
        console.log(result); //[ 2, 5, 7, 13, 21 ]
        console.log(arr2); //[ 2, 5, 7, 13, 21 ]

      如果需要升序排列,则返回 a - b 如果需要降序排列,则返回 b - a

数组的遍历#

forEach()#

  • forEach()方法需要一个函数作为参数

  • 数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素以实参的形式传递进来,我们可以来定义形参,来读取这些内容

  • 浏览器会在回调函数中传递三个参数:

    • 第一个参数(value),就是当前正在遍历的元素
    • 第二个参数(index),就是当前正在遍历的元素的索引
    • 第三个参数(object),就是正在遍历的数组 arr.forEach(function(value , index , obj){ console.log(value); });
  • 列如: 去除数组arr中重复的数字 var arr = [1,2,3,2,2,1,3,4,2,5];

    //for循环方式遍历
    for(var i = 0; i < arr.length; i++){
    for(var j = i + 1; j < arr.length; j++){
    if(arr[i] == arr[j]){
    arr.splice(j,1);
    j--;
    }
    }
    }
    //forEach方式遍历
    arr.forEach(function(num, i, arr){ //num相当于arr[i]
    for(var j = i + 1; j < arr.length - 1; j++){
    if(num == arr[j]){
    arr.splice(j, 1);
    j--;
    }
    }
    });
    console.log(arr);

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

数组
https://sukksa.github.io/posts/shu-zu/
作者
Sukksa
发布于
2021-04-28
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Sukksa
记录前端学习与日常
公告
博客刚刚上线,内容还在慢慢补齐。欢迎随便逛逛~
分类
标签
最新动态
站点统计
文章
69
分类
16
标签
17
总字数
178,517
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录