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