JS解决 Array.fill()参数为对象指向同一个引用地址的问题
作者:奥特曼 发布时间:2024-07-15 21:50:49
标签:js,Array.fill(),引用,地址
JS解决 Array.fill()参数为对象指向同一个引用地址
最近写项目过程中总是想写出漂亮的代码,一行代码搞定绝不用两行,也是踩了fill这个坑了
例如一个数组中想填充一些指定的数据
Array(10).fill(1)
那么结果就会出现[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 十对应的1个
如果呢fill 这个方法接受的值是一个引用数据类型,那么他们会指向同一个地址。
let arr = Array(5).fill({}).map(it=>({}))
arr[0].a = 1
输出结果:[{a:1}, {a:1}, {a:1}, {a:1}, {a:1}]
解决方案:使用map返回出不同的引用的地址,fill参数可随意填写(不为空),主要是map函数中返回的数据。
类型为数组:
let arr = Array(5).fill([]).map(it=>[])
类型为对象:
Array(5).fill({}).map(it=>({}))
注意:对象要用 小括号包裹 否则函数会以为是函数体,默认不写return 返回undefined 。
补充:JS中用Array.fill() 初始化 二维数组 避坑
现在有个需求,创建一个 m*n 的二维数组 先填充为false
1.const P = new Array(3).fill(new Array(3).fill(false));
/*
[
[false, false, false],
[false, false, false],
[false, false, false]
]
*/
2.
const P = new Array(3)
const obj = {name: 'qqq'}
P.fill(obj)
/*
[
[false, false, false],
[false, false, false],
[false, false, false]
]
*/
1和2当我改变一个值:
P[0][0] = true;
结果都是
/*
[
[true, false, false],
[true, false, false],
[true, false, false]
]
*/
坑点:
如果value值为一个引用数据类型,则fill之后,数组里面的值指向的是同一个地址。如果改变了其中一个,则其它的都会改变。
解决:
1.利用双重for循环创建二维数组
for(var i = 0; i < 3; i++) {
arr[i] = new Array();
for(var j = 0; j < 3; j++) {
arr[i][j] = 0;
}
}
2.先用空数组填充,然后再 map 遍历空数组,添加元素。
const P = new Array(3).fill([]).map(() => new Array(3).fill(false));
来源:https://blog.csdn.net/m0_46846526/article/details/129180864


猜你喜欢
- 锟拷码和口字码说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?下面我们一步步探究。看一个
- 导入在阅读过程中如果遇到一些带有水印的资料是比较烦心的,如下图所示,水印以及类似的内容会影响我们的阅读体验,而市面上去水印的功能有多要收费且
- 1. File->Setting 打开如下所示的对话框,可以在Editor->General->Font下设置
- 一般情况下TextArea区输入的文字数量是没有限制的,但是我们可以通过javascript限制表单的文字字数。如下javascript代码
- 直接进入正题,我们需要做的就是通过手指滑动列表项后,右侧出现删除;比如说像这样:向左边滑动后出现如下的效果:开始撸代码~假设我们有N个列表项
- TSNE降维降维就是用2维或3维表示多维数据(彼此具有相关性的多个特征数据)的技术,利用降维算法,可以显式地表现数据。(t-SNE)t分布随
- 本文实例讲述了Python使用Pickle库实现读写序列操作。分享给大家供大家参考,具体如下:简介pickle模块实现了用于对Python对
- 朋友的网站要计算机票的折扣价格,并且在最后的折扣价格上应对个位进行四舍五入,同时在ASP和Javasc
- div的内容为:<div style="background-color: rgb(255, 238, 221);"
- 1. 原理利用 PIL 库来获取图片并修改大小,利用灰度值转换公式把每一个像素的 RGB 值转为灰度值gray = int(0.2126*r
- Django中提供了一个关于URL的映射的解决方案,1.客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,
- 一、需求描述web 自动化测试/python爬虫往往会遇到扫码登录的情况,不是所有的网站都支持用户密码登录,遇到这种扫码登录的情况会阻碍我们
- 一、需求分析有一批key已经写入到3个txt文件中,每一个txt文件有30万行记录。现在需要读取这些txt文件,判断key是否在数据仓库中。
- 如下所示:import picklewith open(filename, 'rb') as f: datadict = p
- 以下所有例子中结构定义如下:type User struct { Id_ bson.ObjectId `bson:
- 目录1. 选择合适的数据结构2. 善用强大的内置函数和第三方库3. 少用循环4. 避免循环重复计算5. 少用内存、少用全局变量总结官方原文,
- 如果说goroutine是Go语言程序的并发体的话,那么channels则是它们之间的通信机制。一个channel是一个通信机制,它可以让一
- 遇到了这个问题,意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持解决:1. 如
- 不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法&ldq
- 本文实例讲述了Python常用模块sys,os,time,random功能与用法。分享给大家供大家参考,具体如下:sys:介绍:主要包含涉及