总结一下常见的数组方法
数组常见方法有forEach、map、filter、some、every、reduce、for...in、find、findIndex、for...of、pop、push、shift、unshift、splice、slice等
下面一一详细介绍:
1. forEach:实现每个元素调用fun,没有返回值,不支持使用break和continue
var arr = [1,2,3,4,5]
var newArr = []
arr.forEach(function(elem,index,array){
var item = elem * index
newArr.push(item)
})
console.log(newArr) //[0, 2, 6, 12, 20]
2. map:不论如何遍历完所有 返回[新元素+新数组]
var newArr2 = arr.map(function(ele,index,arr){
// 返回每一个元素
return {
num:ele
}
});
3. filter:返回符合fun条件的元素数组
var newArr3 = arr.filter(function(val){
return val%2 === 0
});
// [2, 4]
4. some: 元素中满足一个的判断,数组找true的循环优化(一真即真)
var isOk1 = arr.some(function (ele, index, arr) {
return typeof ele === 'number';
});
console.log(isOk1); //true
5. every: 全都满足的判断, 数组找false的循环优化(一假即假)
var isOk2 = arr.every(function(ele,index,arr){
return typeof ele !== 'number';
});
console.log(isOk2); //false
6. reduce: 接收函数,求和
function一般传两个参数,不传递第二个参数(初始值),则第一轮没有return之前的参数是n1,n2 6-1 累加器
var sum = arr.reduce(function (sum, ele) {
return sum + ele; // 返回的就是新的sum
}, 0);
console.log('求和的结果是:', sum) //求和的结果是: 15
6-2 获取数组中的最大值
var max = arr.reduce(function(prev,cur){
Math.max(prev,cur)
})
console.log(max) // 5
7. for...in:遍历数组的时候会将原型下面函数也遍历出来
Array.prototypr.foo = function(){
console.log("foo")
}
for(let index in arr){
console.log(index)
}
7. find:查找元素 参数为元素 索引 原数组
var arr2 = new Array(100).fill(undefined).map(function(ele,i){
return i + 1;
});
var findEle = arr2.find(function(ele,index,arr){
return ele === 50;
});
// 找不到就是undefined
if (findEle !== undefined) {
console.log('findEle:',findEle)
}
8. findIndex:查找索引
var findIndex = arr2.findIndex(function(ele,index,arr){
return ele === 88;
});
if (findIndex !== -1) {
console.log('findIndex:索引是',findIndex) // findIndex:索引是 87
}
9. for...of 适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象
与forEach()不同的是,它可以正确响应break、continue和return语句
for(let item of arr){
console.log(item) // 1 2 3 4 5
}
10. pop(弹出尾部元素)、push(在尾部插入)、shift(弹出头部元素)、unshift(在头部插入)
11. splice(删除、插入)、slice(截取)
var arr3 = new Array(100).fill(undefined).map(function(ele,i){
return i + 1;
});
// 删 // (开始索引,删除几个,...添加的元素)
arr3.splice(110,1)
// 在50之后插入abcde
// arr3.splice(50,0)// 从50开始,删除0个
arr3.splice(50, 0, 'a', 'b', 'c');
console.log(arr3)
//索引可以是负数
console.log(arr4.slice(-20,10) ); // 81~11
// slice方法截取元素
// 需要索引40~50之间
console.log('需要索引40~50之间:', arr3.slice(40, 50))