数组常用的方法(背下来,越熟悉越好)
如何学习数组的方法呢?从以下4点学习
- 方法的含义和作用
- 方法的实参(类型和含义)
- 方法的返回值
- 原来的数组是不是会发生改变
一、数组增删改方法(增删改的方法一定会修改原有的数组)
1、push:向数组末尾增加内容
@params 多个任意类型
@return 新增后数组的长度
const animals = ['pigs', 'goats', 'sheep'];
const count = animals.push('cows');
console.log(count);
// expected output: 4
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows"]
animals.push('chickens', 'cats', 'dogs');
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]
2、unshift 向数组开始位置增加内容
@params 多个任意类型
@return 新增后数组的长度
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
// expected output: 5
console.log(array1);
// expected output: Array [4, 5, 1, 2, 3]
3、pop 删除数组的最后一项
@params
@return 删除的那一项
const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop());
// expected output: "tomato"
console.log(plants);
// expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"]
plants.pop();
console.log(plants);
// expected output: Array ["broccoli", "cauliflower", "cabbage"]
4、shift 删除数组的第一项
@params
@return 删除的那一项
const array1 = [1, 2, 3];
const firstElement = array1.shift();
console.log(array1);
// expected output: Array [2, 3]
console.log(firstElement);
// expected output: 1
5、splice 实现数组的增加、删除、修改
- 删除
@params n,m 都是数字 从索引n开始,删除m个元素(m不写,是删除到末尾)
@return 把删除的部分用新数组存储起来返回
let ary=[10,20,30,40,50,60,70,80,90];
let res=ary.splice(2,4);
console.log(res,ary);//[30,40,50,60] [10,20,70,80,90]
//基于这种方法考科一清空一个数组,把原始数组中的内容以新数组存储起来
ary.splice(0);//[10, 20, 70, 80, 90]
//删除最后一项
ary.splice(ary.length-1);
//删除第一项
ary.splice(0,1);
-
增加、修改
@paramsn,m,x 从索引n开始删除m个元素,用x占用删除的部分
n,0,x 从索引n开始,一个都不删,把x放到索引n的前面@return 把删除的部分用新数组存储起来返回
let ary=[10,20,30,40,50];
let res=ary.splice(1,2,'AAA');
console.log(res,ary);//[20, 30] [10, "AAA", 40, 50]
ary.splice(3,0,"哈哈哈",'ooo','111')
console.log(res,ary);[20, 30] [10, "AAA", 40, "哈哈哈", "ooo", "111", 50]
//向数组末尾追加
ary.splice(ary.length,0,"aaa")
//向数组开始追加
ary.splice(0,0,"aaa")
二、数组的查询和拼接
此组方法中数组不会改变
1、slice
:实现数组的查询
@params startIndex,endIndex 都是数字 从索引startIndex开始,找到索引为endIndex的地方(不包含endIndex这一项)
@return 把找到的内容以一个新数组的形式返回,不改变原来数组
let ary=[1,2,3,4]
let res=ary.slice(1,3);
console.log(res) // [2, 3]
let ary=[1,2,3,4]
let res=ary.slice(1);//endIndex 不写是找到末尾
console.log(res) // [2, 3, 4]
数组的克隆,参数0不写也可以,真正意义上的数组克隆
let ary=[1,2,3,4]
let res=ary.slice(0);
console.log(res) // [1, 2, 3, 4]
思考:
- 1、如果startIndex/endIndex为负数?
- 2、如果startIndex>endIndex?
- 3、如果是非有效数字?
- 4、如果startIndex、endIndex的值都比最大索引大?
这种克隆方式叫浅克隆
深度克隆怎么处理
2、concat:实现数组拼接
@params 多个任意类型值
@return 拼接后的新数组
let ary1=[1,2,3,4];
let ary2=[5,6,7,8];
let res=ary1.concat('666',ary2);
console.log(res) // [1, 2, 3, 4, "666", 5, 6, 7, 8]
3、把数组转化为字符串
把数组转化为字符串,原来数组不变
-
toString
@params@return 转换后的字符串,每一项用逗号分隔(原来数组不变)
let ary=[1,2,3];
let res=ary.toString();
console.log(res) // '1,2,3'
console.log([].toString())//""
console.log([12].toString())"12"
-
join
@params 指定的分隔符(字符串格式)
@return 转换后的字符串(原来数组不变)
let ary=[1,2,3];
let res=ary.join();
console.log(res) // '1,2,3' 不指定分隔符默认逗号
res=ary.join('')
console.log(res) //'123'
res=ary.join('|')
console.log(res) //'1|2|3'
res=ary.join('+')
console.log(eval(res)) //6 eval把字符串变成JS表达式
4、检测数组中是否包含某一项
- indexOf/lastIndexOf/includes
/*
* indexOf/lastIndexOf:检测当前项在数组中第一次或者最后一次出现的索引值(IE6-8中不兼容)
* @params
* 要检索的这一项内容
* @return
* 这一项出现的位置索引值(数组),如果数组中没有这一项,返回结果是-1
* 原数组不变
*/
let ary=[1,2,3,3,2,1];
let res=ary.indexOf(1);
console.log(res) // 0
res=ary.lastIndexOf(1);
console.log(res) // 5
//想验证ary中是否包含"zyx"
if(ary.indexOf('zyx')===-1){
//不包含
}
//也可以直接使用ES6新提供的includes方法判断
if(ary.includes('zyx')){
//包含:如果存在返回的是true
}
5、数组排序或者排列
reverse
/*
* reverse:把数组倒过来排列
* @params
*
* @return
* 排列后的新数组
* 原来数组改变
*/
let ary=[1,2,3,4,5];
ary.reverse();
console.log(ary);//[5, 4, 3, 2, 1]
sort
/*
* sort:实现数组的排序
* @params
* 可以没有,也可以是个函数
* @return
* 排序后的新数组
* 原来数组改变
*/
let ary=[5,3,1,8,9];
ary.sort();
console.log(ary);//[1, 3, 5, 8, 9]
//sort 方法中如果不传递参数,是无法处理10以上数字排序,(默认会按照第一个数字排序,不是我们想要的效果)
ary=[15,13,21,28,9];
ary.sort();
console.log(ary);//[13, 15, 21, 28, 9]
//想要实现多位数正常排序,需要给sort传递一个函数,函数中返回a-b升序,返回b-a实现降序
ary.sort((a,b)=>return a-b);
console.log(ary);// [9, 13, 15, 21, 28]
5、遍历数组中的每一项的方法
forEach
/*
* forEach:遍历数组中的每一项内容
* @params
* 回调函数
* @return
*
* 原来数组不变
*/
let ary=[12,34,55,66,78];
//数组中有多少项函数就默认执行多少次
//每一次执行函数:item是数组中当前要操作的这一项,index是当前索引
ary.forEach((item,index)=>{
})
map
filter
find
reduce
some
some
every
···