数组的方法

198 阅读7分钟

数组

什么是数组?

秒懂百科数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

简单来说数组就是一个又一个元素组成的 有序 的集合数组取值, 需要使用下标 数组长度, 数组.length

数组的常用方法 操作数组“本身的”–数组的内置操作方法–变异方法

1.push():

向数组的末尾添加新内容
参数:要添加的项。传递多个用逗号隔开,任何数据类型都可以
返回新数组的长度,改变原数组.(添加多个元素用逗号隔开)

let arr = [12,34,26];

arr.push(100); //返回一个新的长度

length=4console.log(arr)//结果为 [12,34,26,100]

2.pop():

删除数组的最后一项,返回删除的数据,会改变原来的数组。
(该方法不接受参数,且每次只能删除最后一个)

let arr= [108,112,39,10];

arr.pop();//删除的最后一项为10

console.log(arr);//[108, 112, 39]

3.shift():

删除数组的第一项,返回被删除的数据,会改变原来的数组。
(该方法同pop();一样不接受参数,且每次只能删除数组第一个)

let arr= [108,112,39,10];

arr.pop();//删除的最后一项为10

console.log(arr);//[108, 112, 39]

4.unshift():

数组第一位添加一个或多个元素,并返回新数组的长度,改变原数组。
(添加多个元素用逗号隔开)
改变原数组

let arr= ['c','d'];

arr.unshift('a','b');

console.log(arr);//["a", "b", "c", "d"]

5.slice():

按照条件查找出其中的部分内容 参数:

array.slice(n, m),从索引n开始查找到m处(不包含m)

array.slice(n) 第二个参数省略,则一直查找到末尾

array.slice(0)原样输出内容,可以实现数组克隆

array.slice(-n,-m) slice支持负参数,从最后一项开始算起,-1为最后一项,-2为倒数第二项 返回值:返回一个新数组

不改变原数组

let arr= [1,2,3,4,5,6,7,8,9];

//console.log(arr.slice(2,8));//从索引2开始查找到索引为8的内容,结果为[3, 4, 5, 6, 7, 8]

//console.log(arr.slice(0));

console.log(arr.slice(-2,-1));//[8]

6.splice():

对数组进行增删改

增加:ary.splice(n,0,m)从索引n开始删除0项,把m或者更多的内容插入到索引n的前面 返回空数组

修改:ary.splice(n,x,m)从索引n开始删除x个,m替换删除的部分

把原有内容删除掉,然后用新内容替换掉

删除:ary.splice(n,m) 从索引n开始删除m个内容 (如果第二个参数省略,则从n删除到末尾) 返回删除的新数组,原有数组改变

//增加

let arr1= [33,44,55,66,77,88];

arr1.splice(2,0,'a','b')

console.log(arr1);// [33, 44, "a", "b", 55, 66, 77, 88]

 
//修改

let arr2= [33,44,55,66,77,88];

arr2.splice(1,2,'x','y')

console.log(arr2);// [33, "x", "y", 66, 77, 88]

 
//删除

let arr3= [33,44,55,66,77,88];

//console.log(arr3.splice(3,2))//[66, 77]

console.log(arr3.splice(3));//[66, 77, 88]

7.join():

用特定的字符,将数组拼接形成字符串 (默认",")

var list = ["a", "b", "c", "d"]; // "a-b-c-d"
var result = list.join("-");     //"a-b-c-d"
var result = list.join("/");     //"a/b/c/d"
var result = list.join("");      //"abcd"
var result = list.join();        //  a,b,c,d
console.log(result);

8.concat():

用于连接两个或多个数组
参数:参数可以是具体的值,也可以是数组对象。可以是任意多个
返回值:返回连接后的新数组
不改变原数组

let ary8 = ['你'];

let ary80 = ary8.concat('好');

console.log(ary80);//["你", "好"]

9.indexOf():

查询某个元素在数组中第一次出现的位置 存在该元素,返回下标,不存在 返回 -1
(可以通过返回值 变相的判断是否存在该元素)
不改变原数组

let arr= ['a','b','c','d','e','a','f'];  

console.log(arr.indexOf('c'));//2

console.log(arr.indexOf('a',3))//5

10.lastIndexOf():

检测当前值在数组中最后一次出现的位置索引 (或者理解为反向查询第一次出现的位置) 存在该元素,返回下标,不存在 返回 -1 (可以通过返回值 变相的判断是否存在该元素)
不改变原数组

let arr= ['a','b','c','d','e','a','f'];  

console.log(arr.lastIndexOf('c'));//2

console.log(arr.lastIndexOf('f',1))//-1

11.includes():

判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
不改变原数组

let arr= ['a','b','c','d'];

console.log(arr.includes('c'));//true

console.log(arr.includes(2));//false

12.sort():

对数组的元素进行排序(默认是从小到大来排序 并且是根据字符串来排序的)

参数:可选(函数) 规定排序规则 默认排序顺序为按字母升序

返回值:排序后新数组

改变原数组

sort在不传递参数情况下,只能处理10以内(个位数)数字排序

let arr= [32,44,23,54,90,12,9];

       arr.sort(function(a,b){  
        // return a-b;  // 结果[9, 12, 23, 32, 44, 54, 90]

       // return b-a;  // 结果[90, 54, 44, 32, 23, 12, 9]   }) 

console.log(arr);

13.reverse():

将数组的数据进行反转,并且返回反转后的数组。
会改变原数组

let arr= [6,8,10,12];

console.log(arr.reverse());//[12, 10, 8, 6]

14.forEach():

遍历数组,每次循环中执行传入的回调函数 。(注意: forEach() 对于空数组是不会执行回调函数的。) 没有返回值,或理解为返回值为undefined。

不改变原数组

参数:函数 ary.forEach(function(item,index,ary){}) item:每一项 index:索引 ary:当前数组


  var list = [32, 93, 77, 53, 38, 87];
    var res = list.forEach(function (item, index, array) {
      console.log(item, index, array);
    });
    console.log(res)

结果:

20201128151532122.png

数组元素求和

var arr= [32, 93, 77, 53, 38, 87];
    var sum = 0;
    arr.forEach(function (item) {
      console.log(item);
      sum += item;
    });
    console.log(sum);

结果:

Snipaste_2023-03-01_17-14-01.png

15.map():

遍历数组, 每次循环时执行传入的回调函数,根据回调函数的返回值,生成一个新的数组 ,同forEach() 方法,但是map()方法有返回值,可以return出来;
参数: item:每次循环的当前元素, index:当前项的索引, array:原始数组;

  var list = [32, 93, 77, 53, 38, 87];
    var res = list.map(function (item, index, array) {
      return item + 5 * 2;
    });
    console.log("原数组", list);
    console.log("新数组", res);

结果:

11.png

16.filter():

遍历数组, 每次循环时执行传入的回调函数,回调函数返回一个条件,把满足条件的元素筛选出来放到新数组中.
参数: item:每次循环的当前元素, index:当前项的索引, array:原始数组;

        var list = [32, 93, 77, 53, 38, 87];
        var resList = list.filter(function (item, index, array) {
            return item >= 60; // true || false
        });
        console.log(resList);

结果:

222.png

17.every():

遍历数组, 每次循环时执行传入的回调函数,回调函数返回一个条件,全都满足返回true 只要有一个不满足 返回false => 判断数组中所有的元素是否满足某个条件

    var list = [32, 93, 77, 53, 38, 87];
    var result = list.every(function (item, index, array) {
      console.log(item, index, array);
      return item >= 50;
    });
    console.log(result);

结果:false

18.some():

遍历数组, 每次循环时执行传入的回调函数,回调函数返回一个条件,只要有一个元素满足条件就返回true,都不满足返回false => 判断数组中是否存在,满足某个条件的元素

    var list = [32, 93, 77, 53, 38, 87];
    var result = list.some(function (item, index, array) {
      return item >= 50;
    });
    console.log(result);

结果:true

19.toString():

直接将数组转换为字符串,并且返回转换后的新数组,不改变原数组,与join();方法不添加任何参数相同。

 var list = ["a", "b", "c", "d"];
    var rel = list.toString();
    console.log(rel);   // a,b,c,d   (字符串类型)