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

Dúvida - Array ?!!!

Boa tarde!

Pessoal estou com um dúvida / problema. Não estou conseguindo lê um array de objeto. Abaixo as classes:

class Pessoa {

    constructor(nome, profissao){
        this._nome = nome;
        this._profissao = profissao;
    }

    get nome(){
        return this._nome;
    }

    get profissao(){
        return this._profissao;
    }


}
class ListaPessoa{

    constructor(){
        this._pessoas = [];
    }

    adiciona(...pessoa){
        this._pessoas.push(pessoa);
    }

    limpa(){
        this._pessoas = [];
    }

    get lista(){
        return [].concat(this._pessoas);
    }

}

Adicionei duas pessoas, porém, quando recebo a lista de pessoas aparece apenas uma lista.

<script src="js/model/Pessoa.js"></script>
<script src="js/model/ListaPessoa.js"></script>


<script>

let p1 = new Pessoa('Fulano','Analista I');
let p2 = new Pessoa('Ciclano','Analista II');

let list = new ListaPessoa();
list.adiciona(p1,p2);

console.log(list.lista); //Com problema


let num = [1,2,3,4,5];
num2 = num.concat(9);

console.log(num2);//Normal


</script>
5 respostas

Fiz uma gambiarra "let n = list.lista[0];" ai deu certo. Essa solução está correta?

<script src="js/model/Pessoa.js"></script>
<script src="js/model/ListaPessoa.js"></script>


<script>

let p1 = new Pessoa('Fulano','Analista I');
let p2 = new Pessoa('Ciclano','Analista II');
let p3 = new Pessoa('Moraes','Analista III');

let list = new ListaPessoa();
list.adiciona(p1,p2,p3);

console.log(list.lista);

let n = list.lista[0]; //Ajuste (gambiarra)

console.log(n);
console.log(n.map(function(n){
    return `${n.nome} | ${n.profissao}`;
}));


n.forEach(element => {
console.log(`Nome: ${element.nome} - Profissao: ${element.profissao}`);    
});





let num = [1,2,3,4,5];
num2 = num.concat(9);

console.log(num2);//Normal


</script>

Olá Tiago,

Quando você adiciona uma Pessoa, deve passar uma pessoa por vez para criar uma array de pessoa para ficar mais fácil trabalhar com ele. Segue o código.

<script src="Models/Pessoa.js"></script>
<script src="Models/ListaPessoa.js"></script>


<script>

let p1 = new Pessoa('Fulano','Analista I');
let p2 = new Pessoa('Ciclano','Analista II');

let list = new ListaPessoa();
list.adiciona(p1);
list.adiciona(p2);

console.log(list.lista); //Com problema

</script
class ListaPessoa{

    constructor(){

        this._pessoas = [];
    }

    adiciona(pessoa){
        this._pessoas.push(pessoa);
    }

    limpa(){
        this._pessoas = [];
    }

    get lista(){

        let pessoas = this._pessoas;

    for (let index = 0; index < pessoas.length; ++index) {
        let nome = pessoas[index].nome;
        let profissao = pessoas[index].profissao;
        var name = name + 'Nome: ' + nome +   ' Profissao:' + profissao +'\n';

    }
        return name;
    }

}

O teu método adiciona original recebe um array de pessoas e transforma em um objeto (...pessoa). Para que ele funcione corretamente, conforme está, deveria ser reescrito assim (retirando o es6 destructuring):

adiciona(pessoas){
        this._pessoas.concat(pessoas);
    }

Olá,

A função ** lista ** poderia ser do seu jeito também.

   get lista(){

    let pessoas = this._pessoas;
    pessoas.forEach(element => {
        console.log(`Nome: ${element.nome} - Profissao: ${element.profissao}`);    
    })

}
solução!

Obrigado pessoal. Vocês ajudaram muito. Muito obrigado!