news 2026/6/7 1:15:11

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/5/27 6:37:05

无需手动编译!PyTorch-CUDA基础镜像一键启动AI项目

无需手动编译&#xff01;PyTorch-CUDA基础镜像一键启动AI项目 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型设计或调参&#xff0c;而是环境配置——“为什么代码在我机器上跑得好好的&#xff0c;换台设备就报错&#xff1f;”这种问题几乎成了每个AI工程师都经…

作者头像 李华
网站建设 2026/6/5 20:25:08

移动测试的变革与工具选型挑战

在设备碎片化&#xff08;Android超3万种设备型号&#xff09;和iOS/Android双平台迭代加速的背景下&#xff0c;2025年移动测试工具已从单一功能向AI驱动的全链路解决方案进化。本文基于全球Top 500移动团队的实践反馈&#xff0c;精选10款必备工具&#xff0c;覆盖自动化、云…

作者头像 李华
网站建设 2026/5/29 12:27:01

三菱 FX3U 电机转速与频率互转 FB 功能块实战分享

三菱FX3U 电机转速与频率互转FB功能块实际项目中的应用&#xff0c;做成fb块出给有需要的朋友。程序分三种情况&#xff0c;一是直接转换&#xff0c;二是使用减速机情况下的速度频率转换&#xff0c;三是使用皮带轮情况下的速度频率转换。 更多使用场景可以探讨。把换算封装成…

作者头像 李华
网站建设 2026/6/5 12:23:21

【计算机毕业设计案例】基于SpringBoot的供应链管理系统的设计与实现基于SpringBoot的粮食供应链管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/27 6:11:05

Java毕设项目:基于SpringBoot的粮食供应链管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/30 21:10:40

PyTorch 2.6版本新特性解析 + CUDA 12支持实测性能提升

PyTorch 2.6 CUDA 12&#xff1a;性能跃迁与容器化开发新范式 在高端 GPU 日益普及的今天&#xff0c;一个令人尴尬的现象依然普遍存在&#xff1a;许多深度学习项目在 A100 或 H100 上跑出的训练吞吐&#xff0c;甚至还不如理论峰值的 60%。问题往往不在于模型设计&#xff0…

作者头像 李华