2
respostas

Acessar um item de um array a cada chamada na funcao

Boa tarde, estou com uma dúvida pois toda vez que adicionar um paciente na tabela eu queria que ele desse um ID de 0 a 10 mas fica sempre no primeiro item do array

class Model {

    constructor(nome, peso, altura) {
        this._nome = nome;
        this._peso = peso;
        this._altura = altura;
        Object.freeze(this);
    }

    get nome() {
        return this._nome;
    }

    get peso() {
        return this._peso;
    }

    get altura() {
        return this._altura
    }

    get imc() {
        return  Math.round(this._peso / (this._altura * this._altura));
    }

    posicao() {
       let ordem = [1,2,3,4,5,6,7,8,9,10];

       for(var i = 0; i < 10 ; i++) {
           return ordem[i];
       }

    }
}

No caso eu chamo ela em ${n.posicao()} , tem algo de errado ?

class View {

    constructor(elemento){
        this._elemento = elemento;
    }

    template(model) {
        return `
            <table class="table">
                <thead class="thead-dark">
                <tr>
                    <th scope="col">ID</th>
                    <th scope="col">Nome</th>
                    <th scope="col">IMC</th>
                </tr>
                </thead>
                <tbody>
                ${model.pacientes.map(n => {
                    return `
                        <tr>
                            <th scope="row">${n.posicao()}</th>
                            <td>${n.nome}</td>
                            <td>${n.imc}</td>
                        </tr>
                        <tr>
                            <th scope="row"></th>
                            <td></td>
                            <td></td>
                        </tr>
                        <tr>
                            <th scope="row"></th>
                            <td></td>
                            <td></td>
                        </tr>
                        </tbody>
                    `
                }).join('')}
            </table>
        `
    }


    update(model) {
        this._elemento.innerHTML = this.template(model)
    }

}
2 respostas

Opa.

Está sempre retornando o primeiro item do array porque você está fazendo um return dentro do for. Então o for é executado somente uma vez e retorna o primeiro valor do array.

Você poderia utilizar o seguinte código para conseguir um valor de 1 a 10:

int id = new Random().nextInt(10) + 1;

Este código irá retornar um número aleatório entre 1 e 10.

Sei que estou errando em algo simples kkk mas na verdade eu quero que toda vez que adicionar alguém ele dê um numero de ID em ordem crescente , primeiro paciente = 1 ,segundo paciente = 2 e assim vai