Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Criar 2 arrays de objetos, sem modificar o original.

Boa tarde galera, estou desenvolvendo uma aplicação usando Vue, e estou travado num pequeno problema. Fiz uma espécie de "Drag and Drop" só que com buttons onde ao ser clicado sai de uma lista e joga para outra. O problema é que preciso manter a lista original, pois esse drag and drop é aberto num modal, onde recebe um parametro para que faça um map no array, e retire deles aqueles que já existem no parâmetro enviado. Porém magicamente o vue está alterando tanto a lista original, quando a lista que deveria ser manipulada. Segue o trecho do código que eu gostaria de manter a lista original sem que fosse modificada.

created() {
        this.service = new PerifericoService(this.$resource);
        this.service.lista(this.modelo).then
            (data => {
                this.perifericosLista = data;
                this.perifericosListaOrig = data;
            },
            err => {
                this.estilo = "danger";
                this.mensagem = err.message;
            });

    },

Como é possível ver, eu tento guardar a lista original em perifericosListaOrig, porém tudo o que faço na perifericosLista é refletida na perifericosListaOrig. Alguém consegue me ajudar?

4 respostas
solução!

Bom dia!

Já experimentou fazer?

this.perifericosLista = data;
this.perifericosListaOrig = [].concat(data);

Bem, no mesmo dia coloquei umas postagem lá no grupo de VUE.js no facebook, e a galera me deu algumas alternativas... Atualmente estou usando essa para array:

this.perifericosLista       = Array.from(data);
this.perifericosListaOrig   = Array.from(data);

E no caso de objetos estou usando :

this.modelo = Object.assign({},modelo);
 this.modeloAtual = Object.assign({},modelo);

Gostaria de saber qual a melhor forma de trabalhar nos 2 casos, pelo o que li e pesquisei, a alternativa era a de criar um "clone" tanto do objeto, quanto do array.

Tanto faz. Mas se você é muito vidrado em performance, pode fazer um teste e verificar qual é o mais rápido. Aliás, o problema que você enfrentou não é um problema, é algo esperado em programação, quando duas variáveis de referência apontam para o mesmo objeto. Vi que você fez curso de Java na Alura, é a mesma coisa que você aprende sobre referência lá.

Ok Flávio, obrigado !