数组的方法总结:
在我们学习js的过程中,有一些常用的数组的方法,本篇文件针对数组的方法进行了总结:
1)数组添加删除方法:
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 修改原数组,末尾添加一个或多个元素 | 并返回新的长度 |
pop() | 删除 数组的最后一个元素,把数组长度减 1 无参数 | 返回它删除的元素的值 |
unshift(参数1…) | 向数组的开头添加一个或更多元素 | 并返回新的长度 |
shift() | 把数组的第一个元素从其中删除,把数组长度减 1 无参数 | 并返回第一个元素的值 |
语法:
// ① push() 在数组的末尾 添加一个或者多个数组元素 push推
var arr = [1, 2, 3]
arr.push(4)
console.log(arr) //[1,2,3,4]
//目的:
//(1)push是可以给数组追加新的元素
// (2) push()参数直接写数组元素就可以了
//(3)push完之后,返回结果是 新的数组的长度
//(4)原数组也发生了变化
// ② unshift() 在数组的开头 添加一个或者多个数组元素
var arr = [1, 2, 3]
arr.unshift('red')
console.log(arr) //['red',1,2,3,4]
//目的:
//(1)unshift是可以给数组前面追加新的元素
// (2) unshift()参数直接写数组元素就可以了
//(3)unshift完之后,返回结果是 新的数组的长度
//(4)原数组也发生了变化
// ③ pop() 删除数组的最后一个元素,把数组长度-1 无参数 返回它删除的元素的值
var arr1 = [1, 2, 3, 4, 5]
var b = arr1.pop()
console.log(arr1); //返回 [1, 2, 3, 4]
//目的:
//(1)删除了数组的最后一个元素
//(2)也就是把数组的长度-1
//(3)返回一个新的数组,原数组发生变化
// ④ shift() 把数组的第一个元素从其中删除,把数组长度减 1 无参数
var arr2 = [1, 2, 3, 4, 5]
var c = arr2.shift()
console.log(arr2); //返回 [2, 3, 4, 5]
案例:
工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
newArr.push(arr[i]);
}
}
console.log(newArr);
2)数组排序方法
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组 |
语法:
// ① reverse() 颠倒数组中元素的顺序,无参数 该方法会改变原来的数组
var arr = ['red', 'andy'];
console.log(arr.reverse()); // 返回翻转之后的数组 ['andy','red']
console.log(arr); // 原先数组也被修改 ['andy','red']
// ② sort() 对数组的元素进行排序 该方法会改变原来的数组
//参数
var arr1 = [99, 1, 2, 3, 4, 5]
var a = arr1.sort()
//默认的按升序排列
console.log(a) //[1, 2, 3, 4, 5, 99]
//从小到大
var arr2 = [99, 1, 2, 3, 4, 5]
arr2.sort(
function(a, b) {
return a - b
}
)
console.log(arr2) //[1, 2, 3, 4, 5, 99]
//从大到小
arr2.sort(
function(a, b) {
return b - a
}
)
console.log(arr2) //[99, 5, 4, 3, 2, 1]
3)数组操作方法
方法名 | 说明 | 返回值 |
---|---|---|
concat() | 连接两个或多个数组 | 返回一个新的数组 |
slice() | 数组截取slice(begin, end) | 返回被截取项目的新数组 |
splice() | 数组删除splice(第几个开始,要删除个数) | 返回被删除项目的新数组 注意,这个会影响原数组 |
语法:
// ① concat() 连接两个或多个数组
var arr1 = [1, 2];
var arr2 = ['pink', 'red'];
var arr3 = ['andy', 18];
//返回连接之后的新数组
console.log(arr1.concat(arr2, arr3)); // [1, 2, 'pink', 'red', 'andy', 18]
// ② slice() 数组截取slice(begin, end) 返回被截取项目的新数组
var arr = ['宝马', '奥迪', '红旗', '奔驰']
var a = arr.slice(0, 2) //参数可写可不写,不写就返回完整的数组
console.log(a) //['宝马', '奥迪']
console.log(arr) //['宝马', '奥迪', '红旗', '奔驰'] 不会改变原数组
//总结:
//(1)参数可写可不写,不写就返回完整的数组
//(2)返回被截取项目的新数组
//(3)不会改变原数组
// ③ splice() 数组删除splice(第几个开始,要删除个数) 返回被删除项目的新数组 注意,这个会影响原数组
var arr1 = ['宝马', '奥迪', '红旗', '奔驰']
var a = arr1.splice(0, 2) //参数可写可不写,不写就返回完整的数组
console.log(a) //返回的是被删除的内容['宝马', '奥迪']
console.log(arr1) //['红旗', '奔驰'] 改变原数组
//总结:
//(1)参数可写可不写,不写就返回一个空数组
//(2)返回的是被删除的内容
//(3)会改变原数组
var arr2 = ['宝马', '奥迪', '红旗', '奔驰']
var a = arr2.splice(0, 2, '五菱') //从0开始,删除前两个,把‘五菱放在删除的位置’
console.log(a)//['宝马', '奥迪']
console.log(arr2)//['五菱', '红旗', '奔驰']
//总结:
//(1)当有三个值时,第一个值是表示从哪个开始
//(2)第二个值,是删除前几个
//(3)第三个值,是把这个值放在删除的地方
4) 数组位置方法
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 如果没找到返回-1 | 返回下标 从前往后找 |
lastIndexOf() | 如果没找到返回-1 | 返回下标 从后往前找 |
5) 数组的所有元素连接到一个字符串中
方法名 | 说明 | 返回值 |
---|---|---|
join(‘分隔符’) | 方法用于把数组中的所有元素转换为一个字符串。 | 返回一个字符串 |
语法:
// join('分隔符') 方法用于把数组中的所有元素转换为一个字符串。 返回一个字符串
var arr = ['red', 'green', 'blue', 'pink'];
console.log(arr.join()); // 跟toString() 一样, 强制转换为字符串//red,green,blue,pink
//分隔符默认是,逗号
console.log(arr.join('-')); //red-green-blue-pink
console.log(arr.join('/')); //red/green/blue/pink
6)ES5新增数组方法
方法名 | 说明 | 返回值 |
---|---|---|
forEach() | 参数为回调函数,会遍历数组所有的项,回调函数接受三个参数,分别为value, index, self; | 无 |
map() | 根据指定的条件处理数组元素,并且返回处理之后的数组元素组成的新数组 | 处理之后的新数组 |
filter() | 创建一个新数组,其包含通过所提供函数实现的测试的所有元素**,主要用于筛选数组** | 符合条件的新数组 |
some() | 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true | 布尔值:true | false |
every() | every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。 | 布尔值:true | false |
reduce() | 迭代数组的所有项,累加器,数组中的每个值(从左到右)合并,最终计算为一个值 |
//forEach()方法
//参数:forEach(callback);callback默认有三个参数,分别为value(遍历到的数组的数据),index(对应的索引),self(数组自身)。
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.forEach(function(value,index,self){
console.log(value + "--" + index + "--" + (arr === self));
})
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true
console.log(a); //undefined---forEach没有返回值
//该方法为遍历方法,不会修改原数组
//map()方法
//参数:map(callback);callback默认有三个参数,分别为value,index,self。跟上面的forEach()的参数一样
//功能1:同forEach
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.map(function(value,index,self){
console.log(value + "--" + index + "--" + (arr === self))
})
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true
//功能2:每次回调函数的返回值被map组成新数组返回
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.map(function(value,index,self){
return "hi:"+value;
})
console.log(a); //["hi:Tom", "hi:Jack", "hi:Lucy", "hi:Lily", "hi:May"]
console.log(arr); //["Tom", "Jack", "Lucy", "Lily", "May"]---原数组未改变
//filter()方法
//参数:filter(callback);callback默认有三个参数,分别为value,index,self。
//功能1:同forEach
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.filter(function(value,index,self){
console.log(value + "--" + index + "--" + (arr === self))
})
// 打印结果为:
// Tom--0--true
// Jack--1--true
// Lucy--2--true
// Lily--3--true
// May--4--true
//功能2:当回调函数的返回值为true时,本次的数组值返回给filter,被filter组成新数组返回
var arr = ["Tom","Jack","Lucy","Lily","May"];
var a = arr.filter(function(value,index,self){
return value.length > 3;
})
console.log(a); //["Jack", "Lucy", "Lily"]
console.log(arr); //["Tom", "Jack", "Lucy", "Lily", "May"]---原数组未改变
//every()方法
//参数:every()接收一个回调函数作为参数,这个回调函数需要有返回值,every(callback);callback默认有三个参数,分别为value,index,self。
//功能1:当回调函数的返回值为true时,类似于forEach的功能,遍历所有;如果为false,那么停止执行,后面的数据不再遍历,停在第一个返回false的位置。
//demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
console.log(value + "--" + index + "--" + (arr == self))
})
// 打印结果为:
// Tom--0--true
//因为回调函数中没有return true,默认返回undefined,等同于返回false
//demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
console.log(value + "--" + index + "--" + (arr == self))
return value.length < 4;
})
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
//因为当遍历到Jack时,回调函数到return返回false,此时Jack已经遍历,但是后面数据就不再被遍历了
//demo3:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
console.log(value + "--" + index + "--" + (arr == self))
return true;
})
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
// Lucy--3--true
// Lily--4--true
// May--5--true
//因为每个回调函数的返回值都是true,那么会遍历数组所有数据,等同于forEach功能
//功能2:当每个回调函数的返回值都为true时,every的返回值为true,只要有一个回调函数的返回值为false,every的返回值都为false
//demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
return value.length > 3;
})
console.log(a); //false
//demo2:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.every(function(value,index,self){
return value.length > 2;
})
console.log(a); //true
//some()方法
//参数:some()接收一个回调函数作为参数,这个回调函数需要有返回值,some(callback);callback默认有三个参数,分别为value,index,self。
//功能1:因为要判断数组中的每一项,只要有一个回调函数返回true,some都会返回true,所以与every正好相反,当遇到一个回调函数的返回值为true时,可以确定结果,那么停止执行,后面都数据不再遍历,停在第一个返回true的位置;当回调函数的返回值为false时,需要继续向后执行,到最后才能确定结果,所以会遍历所有数据,实现类似于forEach的功能,遍历所有
//demo1:
var arr = ["Tom","abc","Jack","Lucy","Lily","May"];
var a = arr.some(function(value,index,self){
console.log(value + "--" + index + "--" + (arr == self))
return value.length > 3;
})
// 打印结果为:
// Tom--0--true
// abc--1--true
// Jack--2--true
//reduce()方法
// 参数:
// callback:
// previousValue 必选--上一次调用回调返回的值,或者是提供的初始值(initialValue)
// currentValue 必选--数组中当前被处理的数组项
// index 可选--当前数组项在数组中的索引值
// array 可选--原数组
// initialValue: 可选--初始值
//实行方法:回调函数第一次执行时,preValue 和 curValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值.
let arr = [0,1,2,3,4]
let arr1 = arr.reduce((preValue, curValue) =>
preValue + curValue
)
console.log(arr1) // 10
let arr2 = arr.reduce((preValue,curValue)=>preValue + curValue,5)
console.log(arr2) // 15
部分内容参考:https://www.jb51.net/article/235572.htm
7)ES6新增数组方法
名称 | 类型 | 简介 |
---|---|---|
of() | 静态方法 | 用于将一组值,转换为数组。注意跟Array的区别 |
from() | 静态方法 | 将两类对象转为真正的数组(arguments,元素集合) |
find() | 实例方法 | 用于找出第一个符合条件的数组成员 |
findIndex() | 实例方法 | 返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1 |
fill() | 实例方法 | 使用给定值,填充一个数组。可选开始索引和结束索引 |
copyWithin(targetIndex,[start],[end]) | 实例方法 | 在当前数组内部,将指定位置的成员复制到其他位置,然后返回当前数组 |
includes(data,[index]) | 实例方法 | 返回一个布尔值,表示某个数组是否包含给定的值,可选开始索引 |
//of()方法
//Array和Array of()的区别:
//--体现在传一个参数的时候
//--Array传一个参数时,数组中的元素为empty;
//--当Array.of()传一个参数时,数组中的元素是传入的参数的值;
//Array
let arr0 = new Array(4);
console.log(arr0);// [empty,empty,empty,empty]
//Array.of()
let arr2 = Array.of(4)
console.log(arr2); //[4]
//from()方法
//将伪数组变成数组,就是只要有length的就可以转成数组。
let str = '12345'
console.log(Array.from(str)) // ["1", "2", "3", "4", "5"]
let obj = {0:'a',1:'b',length:2}
console.log(Array.from(obj)) // ["a", "b"]
let aa= {0:'a',1:'b'}
console.log(Array.from(aa)) // []
//find()方法
//用于找出第一个符合条件的数组成员,如果没有找到返回undefined
arr1=[1, 2, 3, 4, 5]
let num1 = arr1.find(function(item) {
return item > 1;
});
console.log(num1); //2
//findIndex()方法
//用于找出第一个符合条件的数组成员的位置,如果没有找到返回-1
arr1=[1, 7, 9, 4, 5]
let num1 = arr1.findIndex(function(item){
console.log(item)
return item>10
});
console.log(num1);
let num1 = arr1.findIndex(item => item > 9);
console.log(num1); //-1
let num2 = arr1.findIndex(item => item > 3);
console.log(num2); //2
//fill()方法
//给数组指定的索引,以指定值进行填充
//参数:
//---第一个参数是填充的值
//---第二个参数是起始索引 默认值是0
//---第三个参数是结束的索引(不包含) 默认值是数组length
arr1=[1, 2, 3, 4, 5]
console.log(arr1); //[1, 2, 3, 4, 5]
arr1.fill(6);
console.log(arr1); //[6, 6, 6, 6, 6]
arr1.fill(7, 2);
console.log(arr1); //[6, 6, 7, 7, 7]
arr1.fill(8, 1, 3);
console.log(arr1); //[6, 8, 8, 7, 7]
//copyWith()方法
//在当前数组内部,将指定位置的成员复制到其他位置,然后返回当前数组
// ---第二个参数为起始索引
// ---第三个参数为结束索引**(不包含)**,将对应的数组元素赋值给第一个参数设置的开头的索引,依次取替换原索引上的值
arr1=[1, 2, 3, 4, 5]
let arr4 = arr1.copyWithin(0, 1, 4);
console.log(arr4); //[2, 3, 4, 4, 5]
let arr5 = arr4.copyWithin(1, 3, 4);
console.log(arr5); //[2, 4, 4, 4, 5]
let arr6 = arr5.copyWithin(0, 2, 4);
console.log(arr6); //[4, 4, 4, 4, 5]
//includes()方法
//判断数组是否包含指定值---是全等判断
//相当于Object.is()
//参数:
//---第一个值是包含的指定值
//---第二个值是指定值的索引
arr5=[2, 3, 4, 7, 5]
let flag = arr5.includes(2);
console.log(flag);//true
let flag1 = arr5.includes(3,1);
console.log(flag1);//true
哪些数组方法会改变原数组
- unshift();
- push();
- shift();
- pop();
- sort();
- reverse();
- splice();
- copyWithin()