版权声明:如需转载请著明出处 https://blog.csdn.net/qq_37653449/article/details/87899737
题目一:把一个二维数组展开为一个一维数组
*
let arrs = [[1,2,3,4],[5,6,7,8]];
展开为[1,2,3,4,5,6,7,8];
let arrs = [[1,2,3,4],[5,6,7,8]];
console.log(Array.prototype.concat.call(...arrs));
//[1,2,3,4,5,6,7,8]
题目二:多维数组降维度
*
let arrs = [1,[1],[1,[1,2,3,[4,5,6]]]];
展开为[1,1,1,1,2,3,4,5,6]
let arrs = [1,[1],[1,[1,2,3,[4,5,6]]]];
const flatten = (arr) => {
return Array.prototype.concat.call([],
...arr.map((a)=>Array.isArray(a)?flatten(a):a)
);
}
//依赖语言特性的写法
const flatten = (arr) => {
return eval(`[${arr}]`);
}
题目三:函数截流
*
window.addEventListener('resize',throttle(function(){
console.log(1);
}));
function throttle(fn,delay=300){
let lock = false;
return (...args)=>{
if( lock === true ){return void 0};
fn(args);
lock = true;
setTimeout(function(){ lock = false },delay);
}
}
题目三:防抖
*
window.addEventListener('resize',throttle(function(){
console.log(1);
}));
function throttle(fn,delay=300,I=null){
let func = fn;
return (...args)=>{
clearTimeout(I);
I = setTimeout(func,delay);
}
}
*题目三四的核心都是定时器而且很像 总结一句话 节不清,抖请
题目五:写一个函数curry 完成下列输出 (函数柯里化)
**
const foo = curry((a,b,c,d)=>{
console.log(a,b,c,d);
})
foo(1)(2)(3)(4);//1,2,3,4
foo(1)(2)(3); //无输出
const f = foo(1)(2)(3);
f(5) //1,2,3,5
let curry = (fn)=>{
const resFn = (...allArgs)=> allArgs.length>=fn.length
?fn(...allArgs)
:(...args)=>resFn(...allArgs,...args);
return resFn
}