JS手写题归纳

1.实现正则切分千分位(10000 => 10,000)

//无小数点
let num1 = '1321434322222'
num1.replace(/(\d)(?=(\d{3})+$)/g,'$1,')
//有小数点
let num2 = '342243242322.3432423'
num2.replace(/(\d)(?=(\d{3})+\.)/g,'$1,')

2.解决出现滚动条时 下拉框 数据错位 问题

//下拉框,单选框
getPopupContainer ={trigger => trigger.parentNode}

//时间选择器
getCalendarContainer={trigger => trigger.parentNode}

3.数组扁平化的实现(flat)

let arr = [1,2,[3,4,[5,[6]]]]
console.log(arr.flat(Infinity))//flat参数为指定要提取嵌套数组的结构深度,默认值为 1

4.防抖节流:

//函数防抖
function dithering(callBack,ms){ var t = null; return function(){//这里是事件处理程序,事件对象在这里传递 clearTimeout(t); 
var arg = arguments;//这个arguments是当前函数执行环境下的arguments 
t = setTimeout(function(){ 
callBack.apply(this,arg); 
}.bind(this),ms); } }

//函数节流
function throttle(callBack,ms){
//有一个开始时间
var startTime = new Date().getTime();
return function(){
//console.log(start);
//在input中开始输入的时候 也有一个时间
var nowTime = new Date().getTime();
if(nowTime - startTime >= ms){//相差1秒时间来执行一次
callBack.apply(this,arguments);
startTime = nowTime;
}
}
}

5.手写深复制:

function deepCopy(obj){ //排除非引用数据类型和函数 ,不是对象或是函数就直接返回 
if(!(obj instanceof Object) || typeof obj === "function")
 return obj; //程序走这里包含了函数 数组 和对象 //[] {}; //如果obj不是数组,就一定是对象,
 //如果是数组newObj初始化为一个数组,反之为一个空对象,判断obj是数组还是对象 
var newObj = Array.isArray(obj) ? [] : {}; //for in遍历 
for(var key in obj){ //newObj[key] = obj[key]; //判断obj[key]是否是一个数组或对象 
if(!!obj[key] && obj[key] instanceof Object){ 
newObj[key] = deepCopy(obj[key]); 
}else{ 
newObj[key] = obj[key]; 
} } 
return newObj; 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容