整理下初学时做过的js基础编程题目和大家分享以下,如果大家觉得有用,别忘了点一下赞哦
push 和 pop
用代码实现一个数组的push方法
首先,我们要了解,push和pop方法都是改变原数组的方法
push:在数组末尾添加成员,返回添加后数组长度
pop:在数组末尾剪切一个成员,返回剪切的值
封装push方法:
Array.prototype.myPush = function(...args){
for(let i = 0;i<args.length;i++){
this[this.length] = args[i]
}
return this.length
}
Array.prototype.myPush = function(){
for(let i = 0;i<arguments.length;i++){
this[this.length] = arguments[i]
}
return this.length
}
封装pop方法:
Array.prototype.myPop = function(){
let res = this[this.length-1]
this.length--
return res
}
这里扩展下 shift 和 unshift 方法的封装
unshift:在数组开头添加成员,返回添加后数组长度
shift:在数组开头剪切一个成员,返回剪切的值
Array.prototype.myUnshift = function(...args){
this.splice(0,0,...args)
return this.length
}
利用自己的出栈进栈
Array.prototype.myUnshift = function(...args){
function reverse(arr,start,end){
while(start<end){
let temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
start ++
end --
}
}
reverse(this,0,this.length-1)
for(let i = args.length-1;i>=0;i--){
this[this.length] = args[i]
}
reverse(this,0,this.length-1)
return this.length
}
Array.prototype.myShift = function(){
return Number(this.splice(0,1) + '')
}
利用自己的出栈进栈
Array.prototype.myShift = function(){
function reverce (arr,start,end){
while(start<end){
let temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
start ++
end --
}
}
reverce(this,0,this.length-1)
let res = this[this.length-1]
this.length --
reverce(this,0,this.length-1)
return res
}
Array.prototype.myPush = function(...args){
this = [...this,...args]
}
[].myPush()//SyntaxError: Invalid left-hand side in assignment
这样会触发一个 语法错误(低级错误),系统对这个 this 有保护机制。