遇见问题:向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;
}
到这问题就完美解决了!