加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

如何经过Array.fill()的参数为对象类型的变量指向同一个引用

发布时间:2023-06-12 10:59:06 所属栏目:语言 来源:
导读:这篇文章主要讲解了“如何通过Array.fill()的参数为对象类型的变量指向同一个引用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何通过Array

这篇文章主要讲解了“如何通过Array.fill()的参数为对象类型的变量指向同一个引用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何通过Array.fill()的参数为对象类型的变量指向同一个引用”吧!

JS解决 Array.fill()参数为对象指向同一个引用地址。

补充: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));

这篇关于“如何通过Array.fill()的参数为对象类型的变量指向同一个引用”的文章就介绍到这了,更多相关的内容,小编将为大家输出更多高质量的实用文章!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!