数组方法

42 阅读5分钟

1.push:

  • 作用:向数组末尾追加某一项
  • 参数:添加的具体项,可以是一项,也可以是多项
  • 返回值:新数组的长度
  • 是否改变原数组:改变
var res = ary.push(40, 50, 60);
console.log(res, ary);//  6 (6) [10, 20, 30, 40, 50, 60]

2.pop:

  • 作用:删除数组的最后一项
  • 参数:无
  • 返回值:删除的项
  • 是否改变原数组:改变
var ary = [10, 20, 30];
var res = ary.pop();
console.log(res, ary);//  30 (2) [10, 20]

3.shift:

  • 作用:删除数组的第一项
  • 参数:无
  • 返回值:删除的项
  • 是否改变原数组:改变
var ary = [10, 20, 30];
var res = ary.shift();
console.log(res, ary);//  10  (2) [20, 30]

4.unshift:

  • 作用:向数组的开头添加内容
  • 参数:添加的内容
  • 返回值:新数组的长度
  • 是否改变原数组:改变
var ary = [10, 20, 30];
var res = ary.unshift(10, 20);
console.log(res, ary);//  5 (5) [10, 20, 10, 20, 30]

5.reverse 倒序

  • 作用:把数组元素反向排列
  • 参数:无
  • 返回值:返回值是排序后的新数组
  • 是否改变原数组:改变
var ary = [10, 20, 30];
var res = ary.reverse();
console.log(res, ary);//  (3) [30, 20, 10] (3) [30, 20, 10]

6. sort 排序

  • 作用:把数组进行排序
  • 参数:无或者是一个函数
  • 返回值:排序后的新数组
  • 是否改变原数组:改变
//----------------------不传参的时候

//=====>10 以内的可以排
var ary=[3,2,1,6,8];
ary.sort();

[1, 2, 3, 6, 8]

//=====> 超出10
 var ary2=[1,21,5,33,26]
 ary2.sort();
 [1, 21, 26, 33, 5];
 
 //---------------------------传参的时候
 var ary2=[1,21,5,33,26]
 ary2.sort(function(a,b){
    return a-b; // 升序
    return b-a; //降序
 })

7.splice(增删改一体化)

  • 作用:删除/新增/修改
  • 参数:splice(n,m,...x)不能传负数
  • 返回值:删除的元素
  • 是否改变原数组:是

@1、删除

  • 删除需要给splice传递两个参数
  • 第一个参数:要删除的第一个元素的位置
  • 第二个参数:要删除的元素数量
var nums = [1, 2, 3, 4, 5, 6];
var res = nums.splice(0, 2);
console.log(nums);// [3, 4, 5, 6]
console.log(res);// [1,2]

@2、新增

  • 新增需要传递3个参数
  • 第一个参数:开始的位置
  • 第二个参数:0(要删除的元素数量)
  • 第三个参数: 要插入的元素(任意个)
var num0s = [1, 2, 3, 4, 5, 6];
var res = nums.splice(3, 0, 7, 8, 9);
console.log(nums);//[1, 2, 3, 7, 8, 9, 4, 5, 6] 
console.log(res);// []

@3、修改

  • 修改也需要传递3个参数
  • 第一个参数:开始的位置
  • 第二个参数:要删除的元素数量
  • 第三个参数: 要插入的元素(任意个)
  • 注意:删除的个数和新增的个数可以不一致
var nums = [1, 2, 3, 4, 5, 6];
var res = nums.splice(0, 3, 7, 8, 9);
console.log(nums);//[7, 8, 9, 4, 5, 6] 
console.log(res);// [1, 2, 3]

8.slice

作用:从数组中复制元素

参数:返回值:复制的新数组

是否改变原数组:不改变

如果是一个参数,表示从这个位置到结束所有都被复制

 var res = ary.slice(1);

 console.log(res, ary);

// 两个参数(包含开始,不包含结束)

// 第一个参数表示开始复制的位置

// 第二个参数表示结束位置

 var res = ary.slice(0, 1);

 console.log(res, ary);


var ary = [10, 20, 30, 40, 50, 60];

// 如果参数是负数,将数组的长度+参数

var res = ary.slice(-4, -2);//2,4 数组的长度-4=2,然后从0数到2所以是30,-2所有是第4个50,取头,不取尾,所以是30,40这两位

console.log(res, ary);


// 开始位置不能大于结束位置,否则复制的是空数组

var res = ary.slice(-2, -4);

console.log(res, ary);

10.toString

  • 作用:可以把一个数组转换为字符串
  • 参数:无
  • 返回值:返回值是转换后的字符串
  • 是否改变原数组:不改变
var u = [undefined, null];
console.log(String(undefined));
console.log(String(null));
// 注意,undefined, null不能用toString转字符串
var res = u.toString();
console.log(res);

11.join

  • 作用:把数组通过指定的连接符,转换为字符串
  • 参数:连接符
  • 返回值:返回值是转换后的字符串
  • 是否改变原数组:不改变
var ary1 = [1, 2, undefined, 3, { a: 1 }];
var res = ary1.join("|");
console.log(ary1);//[1, 2, undefined, 3, { a: 1 }]
console.log(res)// 1|2||3|[object Object]  
eval(res) //==> eval  执行计算

12.indexOf/ lastIndexOf 

不兼容ie6-ie8;

  • 作用:获取某项在数组中(首次出现/最后出现的) 索引(也可以用来是否包含某项)
  • 参数:(n,m)
  • 参数:
    •  n:检测的项
    • m:如果是indexOf 的话,就是从索引m开始检索。如果是lastIndexOf 的话,就是从索引m停止检索
  • 返回值:-1或者具体的索引值
  • 是否改变原数组:不改变
+ 作用:检测数组中的某项在数组中(首次indexOf/最后lastIndexOf)出现的位置
    var ary=[1,2,3,4,1,55,1];
    //检测1这个项目在数组ary 中首次出现的位置
    ary.indexOf(1); //0
    //从索引2开始,检测1这个项目在数组中首次出现的位置
    ary.indexOf(1,2); //4
   
    // 检测1这个项目在数组中最后一次出现的索引
    ary.lastIndexOf(1);
    // 检测1这个项目在数组中最后出现的索引,在索引5的位置停止检
    ary.lastIndexOf(1,5)
    
    //如果此项在数组中没有出现,返回值就是-1
    ary.indexOf(66)===>-1

13)includes 

  • 作用:检测数组中是否包含某一项
  • 参数:具体项
  • 返回值:布尔值
  • 是否修改原数组:否
var res=ary.includes(10);//true
var res=ary.includes(100);//false
console.log(res,ary);

数组迭代方法

迭代、循环、遍历

14)forEach

  • 作用:遍历数组中的每一项
  • 参数:函数
  • 返回值:undefined
  • 是否修改原数组:否
  • foreach方法 用来遍历数组的每一项 forEach方法没有返回值

//一个家庭的年龄 过年了  每个人长1岁
//方法1 创建一个新数组
var userAages = [19,21,18,34,32,25,45];
var newUserAges = [];
userAages.forEach(function (item,index,array) {
    newUserAges[index] = item + 1;
})
console.log(newUserAges);
//方法2 直接改变原来数组
var re = userAages.forEach(function (item,index,array) {
    userAages[index] = item + 1;
})
console.log(userAages);
console.log(re);


15)map(结束)

  • 作用:把一个数组可以映射成一个新的数组
  • 参数:函数
  • 返回值:映射后的新数组
  • 是否修改原数组:否
// 有一个数组装着2021年所有人的年龄,2022年以后,每个人的年龄都增加1岁
var allAge = [19,15,,2,30,32,43,45];
var age2020 = allAge.map(function (item,index,arr) {
    return item+1;
})
console.log(age2020);