一:排序
1、插入排序
function sort(arr) {//原地
for (let i in arr) {//选一个元素
while (i>0&&arr[i]<arr[i-1]) {//向前移动到合适的位置
[arr[i],arr[i-1]]=[arr[i-1],arr[i]]
i--
}
}
}
2、快速排序
function sort(arr) {
if (arr.length<=1) return arr
//选基准值
let mid_pos=arr.length>>1
let mid=arr.splice(mid_pos,1)[0]
let left=[],right=[]
//和基准值比较,分别插入left,right数组
arr.forEach(item=>(item<=mid?left:right).push(item))
return [...sort(left),mid,...sort(right)]//递归调用排序
}
二:原生API实现
1、apply()
Function.prototype.myApply=function(context,args) {
context.fn=this//为context设置函数属性
let result=context.fn(...args)//调用函数
delete context.fn//删除context的函数属性
return result
}
2、call()
Function.prototype.myCall=function(context,...args) {
context.fn=this
let result=context.fn(...args)
delete context.fn
return result
}
3、bind()
Function.prototype.myBind=function(context,args1) {//使用[闭包+apply]实现
return (...args2)=>this.apply(context,[...args1,...args2]);
}
4、reduce()
Array.prototype.myReduce=function(fn,init_val){
let [val,idx]=init_val?[init_val,0]:[this[0],1]//设置初始值
for (let i=idx,len=this.length;i<len;i++) {
val=fn(val,this[i],i,this)//循环并迭代结果
}
return val
}
网友评论