当前位置: 首页 > news >正文

js防抖、节流和扁平化实现

下面是 JavaScript 中常见的三个面试高频考点:


✅ 一、防抖(Debounce)

📌 场景:

  • 例如搜索输入框,每次输入触发搜索太频繁;

  • 希望用户停止操作后一段时间再触发函数

✅ 实现方式:

function debounce(fn, delay = 300) {let timer = null;return function (...args) {clearTimeout(timer);timer = setTimeout(() => {fn.apply(this, args);}, delay);};
}

✅ 使用方式:

window.addEventListener('resize', debounce(() => {console.log('窗口大小变化,执行逻辑');
}, 500));

✅ 二、节流(Throttle)

📌 场景:

  • 例如滚动监听、按钮点击,频繁触发但希望控制执行频率

  • 比如希望每 500ms 执行一次即可。

✅ 时间戳实现:

function throttle(fn, delay = 300) {let lastTime = 0;return function (...args) {const now = Date.now();if (now - lastTime > delay) {lastTime = now;fn.apply(this, args);}};
}

✅ 使用方式:

document.addEventListener('scroll', throttle(() => {console.log('节流执行 scroll');
}, 200));

✅ 三、数组扁平化(Flatten Array)

📌 场景:

  • 嵌套数组 [1, [2, [3, [4]]]] 要变成 [1, 2, 3, 4]


✅ 方法 1:递归实现

function flatten(arr) {return arr.reduce((acc, val) =>Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}

✅ 方法 2:flat(Infinity)(ES10 简洁)

const arr = [1, [2, [3, [4]]]];
const result = arr.flat(Infinity);

✅ 方法 3:迭代 + 栈实现(不使用递归)

function flatten(arr) {const stack = [...arr];const result = [];while (stack.length) {const item = stack.pop();if (Array.isArray(item)) {stack.push(...item);} else {result.unshift(item); // 反顺序需要 unshift}}return result;
}

✅ 总结对比

技术适用场景核心原理
防抖停止输入后再处理每次都清定时器
节流控制频繁触发频率设置时间戳或定时器
扁平化处理嵌套数组递归 / ES10 flat / 栈

http://www.lryc.cn/news/605569.html

相关文章:

  • UI测试平台TestComplete如何实现从Git到Jenkins的持续测试
  • 零基础构建MCP服务器:TypeScript/Python双语言实战指南
  • 软考中级-信息安全工程师-每日一学(1)
  • Mockito:Java单元测试Mock框架
  • Effective C++ 条款13:以对象管理资源
  • 防火墙安全实验
  • 使用python写一套完整的智能体小程序
  • 推客小程序商业模型设计:合规分佣体系×盈利模式×LTV提升策略
  • FFmpegHandler 功能解析,C语言程序化设计与C++面向对象设计的核心差异
  • 打车小程序 app 系统架构分析
  • Mac 系统下安装 nvm
  • 旧物重生,交易有温度——旧物回收二手交易小程序,让生活更美好
  • 直播小程序 app 系统架构分析
  • 相亲小程序安全与隐私系统模块搭建
  • 计算机网络:什么是光猫
  • C语言与C++、Java、Python等主流编程语言存在显著差异
  • 医保购药APP源码开发新趋势:对接电子处方与互联网医院
  • SpringMVC核心原理与实战指南
  • 汇编语言中的溢出(Overflow)与下溢(Underflow)
  • TransportClient详细说一说
  • 【CanMV K230】通解教程
  • Java高级用法之回调函数
  • Odoo:免费开源的医疗器械行业解决方案
  • 网安学习NO.20
  • Java实习面试记录
  • Linux移动大量文件命令
  • 递归混合架构(MoR)在医疗领域的发展应用能力探析
  • JAVA后端开发:使用 MapStruct 实现 Java 对象映射
  • 机器学习第二课之逻辑回归(一)LogisticRegression
  • Python与MySQL的关联操作