我有这小段代码:
this.videosProvider.getVideos().subscribe(videos => {
this.videos = videos;
this.videosAux = videos;
console.log(this.videosAux[0].videos)
});
订阅中的变量videos
返回的是:
[
{
"categoria": "Tus dudas de salud",
"videos": [
{
"id": "oiVn4NUJo_k",
"titulo": "La fiebre: mitos y verdades",
"url": "https://www.youtube.com/embed/oiVn4NUJo_k",
"miniatura": "https://img.youtube.com/vi/oiVn4NUJo_k/mqdefault.jpg"
},
{
"id": "1l_tbEZwBjs",
"titulo": "¿Por qué estornuda un recién nacido?",
"url": "https://www.youtube.com/embed/1l_tbEZwBjs",
"miniatura": "http://img.youtube.com/vi/1l_tbEZwBjs/mqdefault.jpg"
}
]
}
]
就像现在第一个代码一样,它可以正确打印视频。但是如果我这样做:
this.videosProvider.getVideos().subscribe(videos => {
this.videos = videos;
this.videos[0].videos = [];
this.videosAux = videos;
console.log(this.videosAux[0].videos)
});
它打印一个空数组。同样,如果我打印videos
,也会发生同样的情况。为什么是这样?我要更改this.videos
而不是this.videosAux
的值。我唯一能想到的是它通过引用以某种方式相关,但是我不明白为什么或如何解决它。
您能帮我吗?
答案 0 :(得分:1)
这是因为数组和对象通过引用传递,而不是像字符串,数字或布尔值那样通过副本传递。您需要将一个阵列复制到一个新的独立阵列。因为有对象数组,所以可以使用JSON.parse(JSON.stringify(videos))。
this.videosProvider.getVideos().subscribe(videos => {
this.videos = JSON.parse(JSON.stringify(videos));
this.videos[0].videos = [];
this.videosAux = JSON.parse(JSON.stringify(videos));
console.log(this.videosAux[0].videos)
});
测试示例:
let someArray = [
{
"categoria": "Tus dudas de salud",
"videos": [
{
"id": "oiVn4NUJo_k",
"titulo": "La fiebre: mitos y verdades",
"url": "https://www.youtube.com/embed/oiVn4NUJo_k",
"miniatura": "https://img.youtube.com/vi/oiVn4NUJo_k/mqdefault.jpg"
},
{
"id": "1l_tbEZwBjs",
"titulo": "¿Por qué estornuda un recién nacido?",
"url": "https://www.youtube.com/embed/1l_tbEZwBjs",
"miniatura": "http://img.youtube.com/vi/1l_tbEZwBjs/mqdefault.jpg"
}
]
}
];
const otherArray = JSON.parse(JSON.stringify(someArray));
someArray[0].videos = [];
console.log(otherArray);
答案 1 :(得分:1)
嘿,如果要将数组的副本复制到其他变量中,可以这样做
this.videos = videos.slice();
this.videosAux = videos.slice()
没有任何参数。