javascript 算法

版权声明:如需转载请著明出处 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
}

猜你喜欢

转载自blog.csdn.net/qq_37653449/article/details/87899737