如何利用 Array.prototype.fill() 配合 map() 创建一个填充了唯一对象引用的矩阵数组
如何利用 Array.prototype.fill() 配合 map() 创建一个填充了唯一对象引用的矩阵数组
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
直接使用 fill() 填充对象,再调用 map() 方法,往往无法得到我们预期的、包含独立对象引用的矩阵。原因在于,fill() 方法会将同一个对象引用复制到数组的每一个位置。要生成一个每个元素都是全新、独立对象的二维数组(也就是矩阵),关键操作必须在 map() 的回调函数内部完成——每次都创建一个新对象。
为什么 fill(obj).map(...) 不行?
来看一个典型的陷阱:Array(3).fill({x: 0})。这行代码确实创建了一个包含3个元素的数组,但所有元素都指向内存中同一个对象。这意味着,如果你后续修改其中任何一个元素(例如执行 arr[0].x = 1),所有其他位置的元素都会同步改变。这显然不是一个真正的矩阵,它只是同一个对象的多个别名而已。
正确做法:在 map 回调里构造新对象
正确的思路是,利用 Array(n) 创建指定长度的数组,然后通过 map() 进行遍历。关键在于,在 map() 的回调函数中,为每一项单独通过 new 关键字或对象字面量创建新对象,从而确保引用完全隔离。下面看几个具体例子:
- ✅ 基础二维矩阵(每个格子都是独立的空对象):
Array(3).fill().map(() => Array(4).fill().map(() => ({}))) - ✅ 带初始值的对象矩阵(例如包含行、列、ID信息):
Array(3).fill().map((_, i) => Array(4).fill().map((_, j) => ({ row: i, col: j, id: Symbol() }))) - ✅ 复用构造函数或工厂函数:
const createCell = () => ({ value: null, dirty: false }); Array(2).fill().map(() => Array(5).fill().map(createCell))
注意 fill() 的坑:不能省略 fill()
这里还有一个细节需要注意:Array(3).map(...) 这种写法,回调函数根本不会执行。为什么呢?因为 Array(n) 创建的是一个充满空位(empty slots)的数组,而不是填充了 undefined 元素的数组。而 map() 方法会跳过这些空位。因此,必须先用 fill()(哪怕只是填充 undefined)把这些空位“激活”成可遍历的实际元素,后续的 map() 才能正常生效。
替代写法:更直观的 Array.from
如果你觉得先 fill() 再 map() 的步骤有些繁琐,那么 Array.from 方法提供了一个更语义化、更直观的替代方案。它天生就能处理长度定义,无需预先填充:
Array.from({length: 3}, () => Array.from({length: 4}, () => ({})))Array.from({length: 3}, (_, i) => Array.from({length: 4}, (_, j) => ({i, j})))
这种方法逻辑更清晰,一步到位,避免了因空位问题导致的意外行为,是实践中非常推荐的一种写法。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
学习Web前端开发课程就业有前景吗?
现在学习Web前端开发,前景究竟如何? 互联网发展到今天,Web前端开发早已从“做网页”的角色,跃升为产品体验的核心塑造者。行业火热,吸引大量人才涌入的同时,“市场饱和论”也不绝于耳。这就引出了一个关键问题:在当下这个节点,投身Web前端开发,还能否闯出一片天地?不妨让我们抛开喧嚣,用事实和数据来说
HTML面包屑能改善路径导航吗_HTML面包屑和路径导航原理【科普】
首页 博客 HTML面包屑能改善路径导航吗 HTML面包屑能改善路径导航吗?先明确一个前提 答案是肯定的,但这里有个至关重要的前提:结构必须写对。如果错用了 标签,或者漏掉了关键的语义化容器,那么面包屑就只剩下一个好看的“外壳”,对于真正的路径导航和搜索引擎优化(SEO)来说,其实际作用几乎为零。
HTML通信能解决跨窗口吗_HTML通信改善跨窗口效果【指南】
为什么说“HTML通信”本身是个伪命题? 开门见山,先给一个核心结论:所谓的“HTML通信”本身并不能直接解决跨窗口通信问题。 真正在背后起到作用的,是浏览器提供的 window postMessage() API。虽然这项功能是HTML5标准的一部分,但它本质上属于Ja vaScript的运行时能
form表单基本结构是什么_表单元素组织方式【介绍】
Form表单必须包含容器、至少一个可提交控件,且action和method属性缺一不可;控件须在form内并带name属性;文件上传需enctype= "multipart form-data ";中文提交应设accept-charset= "UTF-8 "。 Form 表单虽然没有所谓的“万能模板”,但其
前端开发工程师,该学学什么技能?
Web前端开发工程师:一个演进而专业的职业 在技术领域,Web前端开发工程师这个头衔,可以说是个相当“年轻”的角色。它真正在国内乃至国际舞台上得到广泛认可和重视,满打满算也才不过七年左右的时间。这个职业的诞生与演变,其实深深地刻着互联网发展的时代烙印。说起来,它的前身可以追溯到Web 1 0时代的“
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

