news 2026/4/17 10:19:43

Array.from() 转换为数组的实际开发场景举例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Array.from() 转换为数组的实际开发场景举例

Array.from()转换为数组的实际开发场景举例


1. DOM操作场景

场景1:批量修改元素样式

// ❌ 不好的做法:直接操作HTMLCollection let items = document.getElementsByClassName('item'); for (let i = 0; i < items.length; i++) { items[i].style.color = 'red'; // 每次循环都重新查询DOM } // ✅ 好的做法:转换为数组 let items = document.getElementsByClassName('item'); let itemArray = Array.from(items); // 一次性获取快照 // 方法1:使用forEach itemArray.forEach(item => { item.style.color = 'red'; item.style.fontWeight = 'bold'; }); // 方法2:使用map创建新数据 let itemData = itemArray.map(item => ({ text: item.textContent, id: item.id, element: item }));

场景2:安全地删除多个元素

<ul id="todo-list"> <li class="todo-item completed">任务1 ✓</li> <li class="todo-item">任务2</li> <li class="todo-item completed">任务3 ✓</li> <li class="todo-item completed">任务4 ✓</li> </ul> <script> // ❌ 危险做法:直接操作实时集合 function removeCompletedItemsBad() { let items = document.getElementsByClassName('completed'); for (let i = 0; i < items.length; i++) { items[i].remove(); // Bug! 每次删除都会改变集合长度 // 第一次循环后:i=0, length=3 // 第二次循环后:i=1, length=2 → 循环结束,漏删一个! } } // ✅ 正确做法:先转换为数组 function removeCompletedItemsGood() { let completedItems = document.getElementsByClassName('completed'); let completedArray = Array.from(completedItems); // 创建静态快照 // 现在可以安全地删除 completedArray.forEach(item => { item.remove(); // 或 item.parentNode.removeChild(item) }); console.log(`删除了 ${completedArray.length} 个已完成项目`); } // 更优雅的写法 const removeCompletedItems = () => { Array.from(document.getElementsByClassName('completed')) .forEach(item => item.remove()); }; </script>

2. 数据处理场景

场景3:从DOM元素提取数据

<table id="product-table"> <tr><td>场景8:实现拖拽排序
<ul id="sortable-list"> <li class="sortable-item">避免实时集合的陷阱循环中删除元素不会出错性能优化减少DOM查询次数一次获取,多次使用功能丰富使用数组方法map、filter、reduce、find等代码清晰链式调用可读性更好,逻辑更清晰内存效率可控的生命周期可以及时释放不再需要的引用框架兼容与现代框架配合更容易集成到React/Vue等框架中

黄金法则:当你需要对DOM元素集合进行遍历、筛选、转换等复杂操作时,先使用Array.from()转换为数组,然后再操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:43:20

正规式 `ab*a` 描述的是以 `a` 开头、中间有任意多个 `b`(包括零个)、最后再以 `a` 结尾的字符串,即形如 `aa`, `aba`, `abba`, `abbba`

正规式 ab*a 描述的是以 a 开头、中间有任意多个 b&#xff08;包括零个&#xff09;、最后再以 a 结尾的字符串&#xff0c;即形如 aa, aba, abba, abbba 等。在词法分析中&#xff0c;这类正规式常用于识别特定模式的标识符或关键字结构。 为了将该正规式转化为可执行的自动机…

作者头像 李华
网站建设 2026/4/17 0:06:00

解析GEO:定义、价值与忽视的代价

在数字化时代&#xff0c;地理信息已成为连接虚拟世界与现实场景的关键纽带&#xff0c;而GEO&#xff08;Geographic Information Object&#xff0c;地理信息对象&#xff09;作为地理信息应用的核心载体&#xff0c;正深刻影响着商业运营、公共服务、个人生活等多个领域。不…

作者头像 李华
网站建设 2026/4/16 21:58:54

西门子 PLC_PVC 送料配料系统控制程序画面实例分享

西门子PLC_PVC送料配料系统控制程序画面实例&#xff0c;结构采用S7-314CWincc 程序内容包括1.配料系统物料分配2.模拟量转换&#xff0c;监测压力&#xff0c;称重程序&#xff0c;3.PROFIBUS通讯系统4.配方管理程序块5.变频器&#xff08;1拖6&#xff09;控制 项目包括&…

作者头像 李华
网站建设 2026/4/15 13:14:43

探索FX5U程序框架模板(10轴):开启运动控制新征程

FX5U程序框架模板&#xff08;10轴&#xff09; 程序由老工程师费尽心力的整理&#xff0c;把控制允许整理成简单的模板架构程序。 程序讲解 1 轴的参数初始化 2 自动启动条件 3 安全条件&#xff08;台湾称许可条件&#xff0c;这个可以避免运动打架&#xff0c;很重要&#x…

作者头像 李华
网站建设 2026/4/16 21:39:40

2022最新款切条机切带机程序,开启高效切割新时代

2022最新款程序&#xff0c;切条机切带机选用中达优控定长送料触摸屏一体机程序 三菱work2编辑软件&#xff0c;能用于超声切带和热切 配有触摸屏软件 送料方式可以自由选择&#xff0c;根据实际切长的用夹手加滚筒送料&#xff0c;切短的用滚筒送料&#xff0c;任意调整切割…

作者头像 李华
网站建设 2026/4/15 16:33:28

关闭Windows自动更新的6种方法【实用指南】Win11永久关闭系统自动更新

由于微软更新策略变更&#xff0c;出厂预装系统是无法禁用更新功能的&#xff0c;在联网检测到版本较低的情况下微软将强制推送更新通知。 那么如何彻底禁止Windows 11自动更新? win11更新怎么关闭&#xff1f;windows禁止更新工具插件,Win11永久关闭更新要怎么操作&#x…

作者头像 李华