数组展平(递归)
展平一个数组,[[1,2],3,[[[4]],5]] => [1,2,3,4,5]
1 2 3 4 5
| function flatten(arr){ return [].concat( ...arr.map(x => Array.isArray(x) ? flatten(x) : x) ) }
|
函数节流
document.addEventListener(‘scroll’, throttle(console.log(‘滚动了’)))
过滤掉重复的滚动事件
1 2 3 4 5 6 7 8 9
| function throttle(fn, delay = 60){ let lock = false return (...args) => { if(lock) return; fn(...args); lock = true; setTimeout(() => {lock = false}, delay) } }
|
过滤掉重复的验证事件(用户输入停止后300ms触发验证)
1 2 3 4 5 6 7
| function throttle(fn, delay, timer = null){ return (...args) => { clearInterval(timer) timer = setTimeout(fn.bind(null, ...args), delay) } }
|
柯里化
1 2 3 4 5
| const curry = func => { const g = (...allArgs) => allArgs.length >= func.length ? func(...allArgs) : (...args) => g(...allArgs, ...args); return g; }
|
重要的Math函数
1 2 3 4 5 6 7 8 9
| Math.abs 求绝对值 Math.ceil 向上取整 Math.floor 向下取整 Math.max 求最大值 Math.min 求最小值 Math.random 0~1之间的随机数 Math.sqrt 平方根 Math.sign 求数值的符号 Math.pow 求幂
|
分页计算
在一个分页表格中,给定每页显示条数(pageSize)和元素的序号(index),求页码
1
| const pageNo = Math.ceil((index+1)/pageSize)
|
数组最大值
const A = [1,2,3,4,5]
1
| const max = Math.max(...A)
|
生成20~30的随机数
const min = 20, max = 30;
1
| Math.round(min + Math.random() * (max-min))
|
判断一个数是否时素数
1 2 3 4 5 6 7 8 9 10 11 12
| function is_prime(n){ if(n <= 1) return; const N = Math.floor(Math.sqrt(n)); let is_prime = true; for(let i = 2; i <= N; i++){ if(n % i === 0){ is_prime = false break; } } return is_prime }
|
数组相关操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Array.length 长度 [1,2,3].length -> 3 indexOf 获取元素的序号 [1,2,3].indexOf(2) -> 2 Array.isArray 判断是否是数组 Array.isArray([]) -> true forEach 遍历 push/pop/shift/unshift 入栈、出栈、入队、出队 map 映射-1对1 [1,2,3].map(x => x*2) -> [2,4,6] reduce 聚合-多对1 [1,2,3].map((x, y) => x+y) -> 6 filter 筛选 [1,2,3].filter(x => x > 2) -> [3] Array.from 创建数组 concat 合并数组 [1,2].concat([3,4]) -> [1,2,3,4] slice 剪切 splice 删除/插入/替换 reduceRight 从右到左reduce sort 排序 every 所有元素符合某个条件 [1,2,3].every(x => x>0) -> true
|