api
splice
添加/删除项目,返回被删除的项目。
array.splice(a,b,c,d,e...)
从下表为A开始删除B个元素。添加CDE...到A下标元素之前。
1.删除操作不够会删除到最后元素为止
2.操作的元素包括下标为A的元素
3.添加的位置在A下标元素之前
sort
默认转码并升序。可接收一个函数有ab两个参,比较返回值<0a在前。
shift
删除第一个元素并返回删除的元素
pop
删除最后一个并返回删除的元素
push
末尾压入
unshift
末尾添加一个或多个,返回长度
reverse
倒叙数组
fill
abc三个参数,使用a把b到c填充。a必填。
从这里开始的方法不会改变原数组,大多以return返回结果
slice
ab两个参数,下表a到下标b拷贝新数组并返回(浅拷贝)
join
a参数,返回用a隔离元素的数组字符串转化结果,不填默认为逗号
concat
任意个数组参数,把参数连接到数组后面。
indexOf
查找是否存在,返回下标或-1。
与字符串的indexOf不同的是数组使用===,NAN不被匹配。
includes
查找,返回boolean
forEach
遍历,参数a为每个遍历的触发函数,b为函数this对象。
回调函数三个可选参数:currentValue当前值(必须)/index下标/arr数组本身
map
对每个值都进行处理返回新的数组。 参数与forEach相同
find/findindex
参数与forEach相同。函数需要返回boolean。
用于找到返回true的元素或下标。
filter
参数为一个参数为a与a的下标返回boolean的函数。
用于筛选返回一个符合要求的元素数组。
手撕
判断数组
数组扁平化
function fun(arr){
let res = [];
arr.forEach((i)=>{
if (i.constructor === Array){
res = res.concat(fun(i));
}else{
res.push(i);
}
})
return res;
}
数组去重
let fun1 = (arr) => {return Array.from(new Set(arr))}
let fun2 = (arr) =>{
let res = [];
arr.forEach((i)=>{
if (!res.includes(i)) res.push(i)
// if (res.indexOf(i) === -1) res.push(i)
})
return res;
}
let fun3 = (arr) =>{
let res = [];
arr.forEach((i)=>{
if (res.indexOf(i) === -1) res.push(i)
})
return res;
}
let fun4 = (arr) =>{
return arr.filter((i,index)=>{
return arr.indexOf(i) === index;
})
}
let fun5 = (arr) =>{
let map = new Map();
let res = [];
arr.forEach((i)=>{
if (!map.has(i)){
res.push(i);
map.set(i,true);
}
})
return res;
}
手撕filter
Array.prototype.myFilter=function (fn,thisArg){
if (!this) return 'this error';
if (typeof fn !== 'function') return 'fn is not a function';
let res = [];
let arr = Array.from(this);
arr.forEach((...a)=>{
if (fn.call(thisArg,...a)) res.push(a[0]);
})
return res;
}
forEach
Array.prototype.myForEach = function (fn,thisArg){
if (!fn) return new Error('error');
let obj = Object(arr);
let len = Number(obj.length);
for (let i = 0;i < len;i++){
fn.call(thisArg,obj[i],i,obj);
}
}