Js-----数组中push对象,覆盖问题,每次都新建一个对象

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36343142/article/details/80841890

遇见问题:向JS数组中添加对象,想改变一个数组元素的值,结过一个改变,剩下的全部改变。

代码如下:

let data: any = {
floor:'',
name:'',
hls_url:'',
videoId:0,
id:0,
isShow:false,
sort: 0
};
for(let i=0;i<this.showVideoList.length;i++) {
      data.sort = i+1; 
this.showVideoList[i] = data;
}

在执行了上述代码之后,输出的JS数组中每个sort元素的值都是一样的,未循环最后sort的值。


原因:一切都是引用数据类型引起的!上述代码,因为只新建了一个对象,然后给数组中的每个元素,相当于数组中的每个元素所指向的都是同一个对象,所以一个当data改变时,数组中所有元素也会发生改变。因为指向的是同一个对象。内存分析图如下:



修改方法:每次给数组元素赋值的时候,都新建一个对象,确保数组中的每个引用指向的不是同一个对象,修改之后的代码如下:

for(let i=0;i<this.showVideoList.length;i++) {
let data: any = {
floor:'',
name:'',
hls_url:'',
videoId:0,
id:0,
isShow:false,
sort:(i+1)
};
this.showVideoList[i] = data;
}


到这问题就完美解决了!

展开阅读全文

没有更多推荐了,返回首页