news 2026/3/12 8:56:25

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/3/12 1:56:34

Java计算机毕设之基于SpringBoot的私房菜上门定制系统的设计与实现基于springboot+vue的私房菜定制上门服务系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/3/12 1:56:23

Git reset撤销错误提交,保护PyTorch项目历史

Git reset撤销错误提交&#xff0c;保护PyTorch项目历史 在深度学习项目的日常开发中&#xff0c;你是否曾经历过这样的瞬间&#xff1a;刚提交完代码&#xff0c;突然发现训练脚本里还留着调试用的 print() 语句&#xff1f;或者不小心把包含敏感信息的配置文件推到了仓库&…

作者头像 李华
网站建设 2026/3/11 16:46:32

PyTorch-CUDA基础镜像安全加固措施说明

PyTorch-CUDA 基础镜像安全加固实践指南 在现代 AI 工程体系中&#xff0c;一个看似简单的命令 docker run --gpus all pytorch-cuda:v2.6 背后&#xff0c;往往承载着从算法研发到生产部署的完整链路。然而&#xff0c;当我们在享受“一键启动”带来的便利时&#xff0c;是否…

作者头像 李华
网站建设 2026/3/11 16:46:54

【毕业设计】基于SpringBoot的高校学习讲座预约系统的设计与实现(源码+文档+远程调试,全bao定制等)

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

作者头像 李华
网站建设 2026/3/11 17:48:41

Docker Compose编排PyTorch多卡训练环境,支持分布式计算

Docker Compose 编排 PyTorch 多卡训练环境&#xff0c;支持分布式计算 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是“环境配置”这个前置环节。你是否经历过这样的场景&#xff1a;同事发来一份训练代码&#xff0c;信心满满地准备复…

作者头像 李华