js基础--几种数组方法的原生实现
Array.prototype.map=function(fn){
let result=[]
for(let i=0;i<this.length;i++){
result.push(fn(this[i],i,this))
}
return result
}
Array.prototype.forEach=function(fn){
for(let i=0;i<this.length;i++){
fn(this[i],i,this)
}
}
Array.prototype.filter=function(fn){
let result=[]
for(let i=0;i<this.length;i++){
if(fn(this[i],i,this)){
result.push(this[i])
}
}
return result;
}
Array.prototype.reduce = function(fn,ini){
let index
let value
if(ini){
index=0
value=ini
}else{
index=1
value=this[0]
}
for(;index<this.length;index++){
value = fn(value,this[index],index,this)
}
return value
}
console.log([1,2,3,4].reduce((pre,next,i)=>{
return pre+next;
}))
数组扁平化
function flatten1(arr){ #递归
return arr.reduce(function(pre,next){
return pre.concat(Array.isArray(next)? flatten1(next): next)
},[])
}
function flatten2(arr){
return arr.toString().split(',').map(item=>{
return parseInt(item)
})
}
//如果不是数字,直接 return arr.toString().split(',')下同
function flatten3(arr){
return arr.join(',').split(',').map(item=>{
return parseInt(item)
})
}
function flatten4(arr){ #递归
let res=[]
arr.forEach(item=>{
if(Array.isArray(item)){
res = res.concat(flatten4(item))
}else{
res.push(item)
}
})
return res
}
#不递归 循环
function flatten5(arr){
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr)
}
return arr
}
浙公网安备 33010602011771号