尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
`Array(100).map(() => 1)` 为什么全为空?
‍ 写在开头点赞 收藏 学会问题场景群里有位同学在刷 LeetCode想初始化一个长度为 100 的全 1 数组const arrArray(100).map(()1)console.log(arr.length)//100console.log(arr[0])//undefined ❓ console.log(arr.every(vv1))//false❓100 个元素一个都没映射成功。 更诡异的是arr.length 确实是 100但 for…of 遍历却循环了 0 次。这是 JavaScript 最具迷惑性的坑之一。原因分析关键概念稀疏数组Sparse ArrayArray(100) 创建的是一个稀疏数组——它只有 length 属性被设置为 100内部没有任何实际元素即空槽位empty slots。打开浏览器控制台验证const aArray(3)console.log(a)//[empty ×3]console.log(0ina)//false— 索引0根本就不存在 console.log(Object.keys(a))//[]— 没有 keymap、forEach、filter、reduce、every、some 等所有迭代方法都会跳过空槽位这就是映射不起作用的根本原因。对比一下// 真实元素 vs 空槽位 const real[undefined, undefined, undefined]console.log(0inreal)//true— 索引存在 real.map(x1)//[1,1,1]const sparseArray(3)console.log(0insparse)//false— 索引不存在 sparse.map(x1)//[empty ×3]解决方案生成填充数组的最佳实践方案一Array.from推荐 ✅const arrArray.from({length:100},()1)// 或简写 const arrArray.from({length:100},()1)Array.from 会主动遍历 length 并在每个索引上调用回调不会跳过。方案二.fill().map() 组合const arrArray(100).fill().map((_, i)i)// 先生成密集数组再 map.fill() 会用实际值填充所有空槽之后再 map 就不会跳过了。方案三扩展运算符ES6const arr[...Array(100)].map(()1)展开运算符会遍历迭代器而 Array(100) 的迭代器会生成 undefined 填充空槽结果变成一个密集数组。方案四Array.apply 黑科技const arrArray.apply(null, Array(100)).map(()1)原理相同——apply 会将稀疏数组展平为密集数组。实用场景生产中常踩的雷场景 1假分页渲染// ❌ 踩坑写法 const skeletonArray(loading ?10:0).map(()Skeleton /)// 不会渲染任何骨架屏 // ✅ 正确写法 const skeletonArray.from({length: loading ?10:0},()Skeleton /)场景 2稀疏 JSON 反序列化const json[1, , 3]// JSON 中的空元素 const arrJSON.parse(json)console.log(arr)//[1, empty,3]arr.map(xx *2)//[2, empty,6]— 你丢了一个元素场景 3删除元素不缩容const arr[1,2,3,4,5]delete arr[2]// 慎用这会制造空槽 console.log(arr.map(xx))//[1,2, empty,4,5]始终用 splice 代替 delete 删除数组元素。要点总结一句话记忆法Array(n) 造的是鬼屋——有门牌号但里面没人住迭代方法只会给活人敲门。实战中初始化数组始终用 Array.from({ length }) 或 […Array(n)]别被 Array(n).map() 坑了面试分。如果对您有所帮助欢迎您点个关注我会定时更新技术文档大家一起讨论学习一起进步。
RELATED

相关推荐

3分钟终极指南:让Navicat Premium在macOS上永久免费试用

3分钟终极指南:让Navicat Premium在macOS上永久免费试用

3分钟终极指南:让Navicat Premium在macOS上永久免费试用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否曾…

📅 2026/10/2 22:47:40
留学赛道怎么做抖音?8人团队单月获客100+的秘密!

留学赛道怎么做抖音?8人团队单月获客100+的秘密!

各位同行好,我是做新马留学的杨凯。今天不熬鸡汤,直接上数据:我们8人硕博团队,现在单个账号单月稳定获客100,销售转化率10%(十个精准线索成一单)! 能拿到这个结果,核心在…

📅 2026/10/7 3:29:23
Parsec VDD虚拟显示器:如何实现Windows 10+系统的高性能游戏串流解决方案

Parsec VDD虚拟显示器:如何实现Windows 10+系统的高性能游戏串流解决方案

Parsec VDD虚拟显示器:如何实现Windows 10系统的高性能游戏串流解决方案 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd Parsec VDD(Virtual Display Driv…

📅 2026/10/6 1:09:30
MORE NEWS

更多资讯

📰

OmniPact Dapp空投交互全流程与智能合约解析

1. OmniPact Dapp空投交互全流程解析最近区块链圈子里最火的项目非OmniPact莫属了。作为一个深耕区块链行业多年的开发者,我仔细研究了这个项目的技术架构和空投机制,发现确实有不少值得关注的创新点。下面我就从技术角度,带大家完整走一遍这…

📰

生产级智能体平台设计:任务编排、工具管理与运行监控实践

1. 生产级智能体平台的全局设计:三个绕不开的核心模块大模型智能体已经不算新鲜事了,但“能跑通的demo”和“能扛住生产流量的平台”之间,隔着一条极宽的鸿沟。我见过太多团队把智能体嵌进业务流程,结果任务在深夜里悄然悬挂、工具…

📰

RCM算法C++实现:稀疏矩阵带宽缩减与工程实践

简介:这份资源是Reverse Cuthill-McKee(RCM)算法的C实现代码,面向从事数值计算、稀疏矩阵处理与图论问题求解的开发者及学习者,用于解决矩阵带宽(bandwidth)过大导致存储与计算效率低下的问题。…

📰

上下文感知代码补全:提升开发效率的智能编程辅助

1. 项目概述:当代码补全遇上上下文感知在IDE里敲出for循环时自动补全结构,大概是每个程序员都体验过的便利。但传统代码补全就像只会背单词的小学生——它能根据当前输入提示可能的选项,却完全不知道你正在写什么功能、用哪些库、甚至变量名该…

📰

基于生成式AI的隐蔽C2通信技术解析

1. 项目背景与核心思路在网络安全领域,命令与控制(C2)信道的隐蔽性一直是攻防对抗的焦点。传统C2通信往往依赖于固定模式的网络流量,容易被安全设备检测。这个项目探索了一种创新方法:利用生成式AI的文本生成能力&…

📰

深入解析容器技术:从Linux命名空间到Docker架构

1. 容器技术本质解析容器技术近年来已成为现代应用部署的标准方案,但很多人对它的理解仍停留在"轻量级虚拟机"的层面。实际上,容器本质上是一组经过特殊配置的Linux进程,通过内核提供的隔离机制实现资源控制。我在生产环境中使用容…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬