引言
话不多说,开整
1、前增 unshift() 改变原数组
let arr = [1,2];
let res = arr.unshift(0);
console.log(arr); // [0,1,2]
console.log(res); // 3 返回数组长度
2、后增 push() 改变原数组
let arr = [1,2];
let res = arr.push(0);
console.log(arr); // [1,2,0]
console.log(res); // 3 返回数组长度
3、后删 pop() 改变原数组
let arr = [1,2];
let res = arr.pop(0);
console.log(arr); // [1]
console.log(res); // 2 返回删除的元素
4、前删 shift() 改变原数组
let arr = [1,2];
let res = arr.shift(0);
console.log(arr); // [2]
console.log(res); // 1 返回删除的元素
5、改 splice(i, n, t) 改变原数组 i下标 n个数 t替换值
let arr = [1,2];
let res = arr.splice(0,2,5);
console.log(arr); // [5]
console.log(res); // [1, 2] 返回删除元素组成的数组
6、查 不改变原数组
// indexOf() 正查
let arr = [1,2,2];
let res = arr.indexOf(2);
console.log(arr); // [1,2]
console.log(res); // 1 返回元素的下标 没找到返回 -1
// lastIndexOf() 倒查
let arr = [1,2,3,4,2];
let res = arr.lastIndexOf(2);
console.log(arr); // [1,2,3,4,2]
console.log(res); // 4 返回元素的下标 没找到返回 -1
7、拼 concat() 不改变原数组
let arr = [1,2];
let res = arr.concat(3);
console.log(arr); // [1,2]
console.log(res); // [1,2,3] // 返回拼接的数组
8、转 不改变原数组
// join(n) 数组转字符串 n字符
let arr = [1,2];
let res = arr.join(',');
console.log(arr); // [1,2]
console.log(res); // '1,2' 返回字符串
// split(n) 字符串转数组 n字符
let arr = '1,2';
let res = arr.split(',');
console.log(arr); // '1,2'
console.log(res); // [ '1', '2' ]
9、排 改变原数组
// sort((a, b) =>a - b)正序 倒序(b-a)
let arr = [1,5,3,4,2];
let res = arr.sort((a, b) =>a - b);
console.log(arr); // [1,2,3,4,5]
console.log(res); // [1,2,3,4,5]
10、反转 reverse 改变原数组
let arr = [1,5,3,4,2];
let res = arr.reverse();
console.log(arr); // [2,4,3,5,1]
console.log(res); // [2,4,3,5,1]
11、截 slcie(start,end) 不改变原数组
let arr = [1,5,3,4,2];
let res = arr.slice(1);
console.log(arr); // [1,5,3,4,2]
console.log(res); // [5,3,4,2]
console.log(arr.slice()); // [1,5,3,4,2] 深拷贝 局限性请看上篇文末
12、遍历 forEach(callback) 能改变原数组 无法return
let arr = [1,2,3]
let res = arr.forEach((v,i)=>{
arr[i] = v + 1;
return arr;
})
console.log(arr) // [2,3,4]
console.log(res) // undefined
13、映射 map(callback) 不改变原数组 要return 返回新数组
let arr = [1,2,3]
let res = arr.map((v,i)=>{
return v * 2
})
console.log(arr); // [1,2,3]
console.log(res); // [2,4,6]
14、过滤 filter(callback) 不改变原数组 要return 返回符合条件的新数组
let arr = [1,2,3]
let res = arr.filter((v,i)=>{
return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // [1,2]
15、判断 some(callback) / every(callback) 返回布尔值 不改变原数组
// some 只要数组中有一个满足条件 就返回true
let arr = [1,2,3]
let res = arr.some((v,i)=>{
return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // true
// every 要数组中所有元素都满足条件 才返回true
let arr = [1,2,3]
let res = arr.every((v,i)=>{
return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // false
16、迭代 reduce(callback, initVal) initVal初始值 不改变原数组
1.求值
let arr = [1,2,3,4]
let res = arr.reduce((preValue, curValue) => {
return preValue + curValue
},0)
console.log(arr); // [1,2,3,4]
console.log(res); // 10
2.数组去重
let arr = [1,2,3,4,2,3,1]
let res = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(arr); // [1,2,3,4,2,3,1]
console.log(res); // [1,2,3,4]
3.计算数组中元素出现次数
let animals = ['dog', 'pig', 'cat', 'pig','dog'];
let animalsNum = animals.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(animalsNum); // { dog: 2,pig: 2,cat: 1 }
4.转一维数组
let arr = [[0, 1], [2, 3], [4,[5,6]]]
let flat = function(arr){
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur) ? flat(cur) : cur)
},[])
}
console.log(flat(arr)); //[0, 1, 2, 3, 4, 5, 6]
17、变 Array.from() 不改变原数组 将伪数组转为真实数组
function fn(a,b,c){
let res = Array.from(arguments);
res.push(4); // 能调用push方法了
console.log(res);// [1,2,3,4]
}
fn(1,2,3);
// 具有length属性的就可以转成数组
let str = '123';
let res = Array.from(str);
console.log(res); // [ '1', '2', '3' ]
18、包含 includes() 不改变原数组 返回布尔值
let arr = [1,2,3]
let res = arr.includes(3);
console.log(arr); // [1,2,3]
console.log(res); // true
总结
数组的方法有很多,我写的都是相对比较常用的,如有小伙伴知道更多常用的方法,评论告诉我呦,数组的方法主要注意改不改变原数组,上面的我都有标注,有错误的话也请在评论里指正呦。