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

Como passar os parâmetros da instância de Negociacao "automaticamente" (ao invés de manualmente)

Olá pessoal!

Ao invés de passar os parâmetros da instância de Negociacao no código abaixo (onde tem o comentário // dúvida) manualmente (dado._data, por ex), seria possível passá-los "automaticamente", ou seja, sem o programador precisar saber os nomes das propriedades do objeto?

    listaTodos() {
        return new Promise((resolve, reject) => {
            let cursor = this._connection
                .transaction([this._store],"readwrite")
                .objectStore(this._store)
                .openCursor();

            let negociacoes = [];

            cursor.onsuccess = e => {
                let atual = e.target.result;

                if(atual) {
                    let dado = atual.value;
                    negociacoes.push(new Negociacao(dado._data, dado._quantidade, dado._valor)); // dúvida
                    atual.continue();
                } else {
                    resolve(negociacoes); 
                }
            }

            cursor.onerror = e => {
                console.log(e.target.error);
                reject('Não foi possível listar as negociações');
            }
        });        
    }
  • Obs: pesquisando encontrei o Object.keys e Object.values, porém o array retornado pode conter as chaves/valores em ordem diferente da ordem original das propriedades do objeto.
Ex: considerando o objeto dado, que contém as propriedades _data, _quantidade e _valor, nesta ordem, 
o Object.keys(dado), neste caso coincidentemente retornará um array = [_data, _quantidade, _valor] 
(porque _data, _quantidade e _valor estão em ordem alfabética).

Porém, se as propriedades de dado estivessem na ordem _valor, _data, _quantidade, Object.keys(dado) 
retornaria array = [_data, _quantidade, _valor], ou seja, diferente da ordem original!
  • Nos arrays isso é possível com o spread operator:
    let array = [1, 2, 3];
    console.log(...array); // console: 1 2 3

Atenciosamente.

3 respostas
solução!

Boa noite, Elías! Como vai?

Vc poderia modificar o construtor da classe Negociacao e fazer ele receber apenas um objeto! De modo que na hora de criar uma nova negociação, vc faria assim:

new Negociacao(dado);

O que vc acha? Fica bem melhor não é mesmo?

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Olá Gabriel!

Obrigado pelo retorno.

Acho que faltou eu explicar uma parte. No exemplo acima dado é um objeto que vem do banco de dados do navegador IndexedDB (IDB).

Favor me corrija se incorreto, então no construtor da classe Negociacao ficaria como segue?

this._data = dado._data;
this._quantidade = dado._quantidade;
//...

Atenciosamente.

Opa, Elías! É isso aí, vc está certo na sua afirmação! O construtor da classe Negociacao ficará como vc mostrou!

Qualquer coisa é só falar, meu aluno!

Grande abraço!