js数组api重构
一. Array.prototype.pop( )
//重构array.prototype.pop()
Array.prototype.myPop = function(){
if(this.length>0){
var last = this[this.length-1]
this.length--
return last
}else{
return undefined
}
}
二. Array.prototype.push( )
//重构array.prototype.push()
Array.prototype.myPush = function(){
for(var i=0;i<arguments.length;i++){
this[this.length] = arguments[i]
}
return this.length
}
三. Array.prototype.shift( )
//重构array.prototype.shift()
Array.prototype.myShift = function(){
var first = this[0]
for(var i=0;i<this.length;i++){
this[i] = this[i+1]
}
this.length--
return first
}
四. Array.prototype.unshift( )
//重构array.prototype.unshift()
Array.prototype.myUnshift = function(){
var sum = this.length+arguments.length
for(var i=sum;i>0;i--){
if(i>arguments.length){
this[i-1]=this[i-1-arguments.length]
}else{
this[i-1]=arguments[i-1]
}
}
return sum
}
五. Array.prototype.every( )
//重构array.prototype.every()
Array.prototype.myEvery = function(fun,obj){
for(var i=0;i<this.length;i++){
//三目运算符判断是否有第二个参数,如果有则更改this的指向,指向第二个参数
if(!(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))){
return false
}
}
return true
}
六. Array.prototype.some( )
//重构array.prototype.some()
Array.prototype.mySome = function(fun,obj){
for(var i=0;i<this.length;i++){
//三目运算符判断是否有第二个参数,如果有则更改this的指向,指向第二个参数
if(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this)){
return true
}
}
return false
}
七. Array.prototype.map( )
//重构array.prototype.map()
Array.prototype.myMap = function(fun,obj){
var arr = []
for(var i=0;i<this.length;i++){
arr.push(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this))
}
return arr
}
八. Array.prototype.filter( )
//重构array.prototype.filter()
Array.prototype.myMap = function(fun,obj){
var arr = []
for(var i=0;i<this.length;i++){
if(obj?fun.call(obj,this[i],i,this):fun(this[i],i,this)){
arr.push(this[i])
}
}
return arr
}
九. Array.prototype.foreach( )
//重构array.prototype.foreach()
Array.prototype.myMap = function(fun,obj){
for(var i=0;i<this.length;i++){
obj?fun.call(obj,this[i],i,this):fun(this[i],i,this)
}
}