打字稿-变量的更改反映在另一个变量上

时间:2018-07-20 18:28:47

标签: typescript ionic-framework

我有这小段代码:

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的值。我唯一能想到的是它通过引用以某种方式相关,但是我不明白为什么或如何解决它。

您能帮我吗?

2 个答案:

答案 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()

没有任何参数。

相关问题