How do I make it just show the list of female people?

-5

1) Create a page where the user types in 4 the name, sex, phone, and age of person and a button add the data in 4 vectors. Then create 4 buttons to calculate: - How many people are female - List of names and telephones of persons above age 18 years old - List of women's phones between 18 and 25 years old

I'm having a hard time doing this exercise. I can not make the women's phone list between the ages of 18 and 25, I was only able to make the first Women's Phone List between the ages of 18 and 25.

var vetnome =[];
var vettelefone =[];
var vetidade =[];
var vetm =[];
var vetf =[];

window.onload=function(){

    // caixas == 
    var f = document.getElementById("f");
    var m = document.getElementById("m");
    var idade = document.getElementById("idade");
    var telefone = document.getElementById("telefone");
    var nome = document.getElementById("nome");

    // div==
    var div= document.getElementById("div");

    // botões ==
    var mulheres = document.getElementById("mulheres");
    var registrar = document.getElementById("registrar");
    var maiores = document.getElementById("maiores");
    var telMulheres = document.getElementById("telMulheres");

    // functions ====
    registrar.onclick=function(){
        vetnome.push(nome.value);
        vetidade.push(idade.value);
        vettelefone.push(telefone.value);
        vetm.push(m.value);
        vetf.push(f.value);
    }

    telMulheres.onclick=function(){
        var table = "<table>";

        table += "<tr>";
        table += "<th> Nome: </th>";
        table += "<th> Telefone: </th>";
        table += "<th> Sexo: </th>";
        table += "</tr>";

        for (i=0; i<vetnome.length; i++){            
            if(vetf[i]!=""){
                table += "<tr>";
                table += "<td>"+ vetnome[i] +"</td>";
                table += "<td>"+ vettelefone[i] +"</td>";
                table += "<td>"+ vetf[i] +"</td>";
                table += "<td>"+ vetm[i] +"</td>";
                table += "</tr>";
            }
            else if(vetf[i]==""){
                return false;
            }
        }

        table += "</table>"; 
        div.innerHTML=table;
    }
}
    
asked by anonymous 25.10.2017 / 21:40

1 answer

-1

The main problem is because you are using 5 vectors when the question says 4. So the sex is supposed to be stored in a vector and not in 2 as it has:

var vetm =[];
var vetf =[];

It should be just a vector:

var vetsexo = [];

That way lets you know for each person what sex. Retraining the uses of vetm and vetf to vetsexo would look like this:

var vetnome =[];
var vettelefone =[];
var vetidade =[];
var vetsexo =[]; //vetsexo em vez dos outros 2

window.onload=function(){
    var f = document.getElementById("f");
    var m = document.getElementById("m");
    var idade = document.getElementById("idade");
    var telefone = document.getElementById("telefone");
    var nome = document.getElementById("nome");

    var div= document.getElementById("div");

    var mulheres = document.getElementById("mulheres");
    var registrar = document.getElementById("registrar");
    var maiores = document.getElementById("maiores");
    var telMulheres = document.getElementById("telMulheres");

    // functions ====
    registrar.onclick=function(){
        vetnome.push(nome.value);
        vetidade.push(idade.value);
        vettelefone.push(telefone.value);

        //registra m ou f com base no que está escolhido
        vetsexo.push (m.checked?"m":"f"); 
    }

    telMulheres.onclick=function(){
        var table = "<table>";

        table += "<tr>";
        table += "<th> Nome: </th>";
        table += "<th> Telefone: </th>";
        table += "<th> Sexo: </th>";
        table += "</tr>";

        for (i=0; i<vetnome.length; i++){            
            if(vetsexo[i]=="f"){
                table += "<tr>";
                table += "<td>"+ vetnome[i] +"</td>";
                table += "<td>"+ vettelefone[i] +"</td>";
                table += "<td>"+ vetsexo[i] +"</td>"; //agora vetsexo
                table += "</tr>";
            } //o else era desnecessário
        }

        table += "</table>"; 
        div.innerHTML=table;
    }
}
Nome <input type="text" id="nome"><br>
Telefone <input type="text" id="telefone"><br>
Idade <input type="number" id="idade"><br>
Sexo M<input type="radio" id="m" name="sexo"> F<input type="radio" id="f" name="sexo"><br><br>

<div id="div"></div>
<br>Registre algumas pessoas do sexo feminino e depois use a função Tel Mulheres<br><br>

<button id="mulheres">Mulheres</button>
<button id="registrar">Registrar</button>
<button id="maiores">Maiores</button>
<button id="telMulheres">Tel Mulheres</button>

Structuring Properly

I know that the enunciation indicated to do this, to even cut to train the use of vectors, but the structuring is not at all indicated. It would be much better to use an object representing a person with its various fields, and to use only a vector of objects pessoa .

So I put a solution structured in this way and using modern javascript functionality that facilitates:

let pessoas = [];

//const para todos os elementos do html e busca com array destructuring assignment
const [nome, telefone, idade, m, f] = [...document.querySelectorAll('input')];
const [mulheres, registrar, maiores, telMulheres] = [...document.querySelectorAll('button')];
const div = document.getElementById("div");

//addEventListener é o mais apropriado para registar o click
registrar.addEventListener('click', function() {
  pessoas.push({ //adicionar um objeto pessoa com varios campos
    nome: nome.value,
    idade: idade.value,
    telefone: telefone.value,
    sexo: m.checked ? "m" : "f"
  });
});

//Uma vez que todos os botões de funcionalidade listam determinadas pessoas em tabela
//fiz uma função para mostrar um array no html como tabela. Assim cada botão
//tem apenas de "reduzir" o array aos valores necessários e chamar a função passando
//esse mesmo array
function mostrarEmTabela(lista) {
  //utilizar template literals para simplificar a escrita do html
  let table = '<table>
                  <tr>
                    <th> Nome: </th>
                    <th> Telefone: </th>
                    <th> Idade: </th>
                    <th> Sexo: </th>
                  </tr>';

  //for of para percorrer a lista e criar o html correspondente
  for (let pessoa of lista) {
      table += '<tr>
                  <tr>
                    <td>${pessoa.nome}</td>
                    <td>${pessoa.telefone}</td>
                    <td>${pessoa.idade}</td>
                    <td>${pessoa.sexo}</td>
                  </tr>';
  }

  table += "</table>";
  div.innerHTML = table;
};

//agora estes botões so chamam a função passando uma lista já filtrada
mulheres.addEventListener('click', function(){
  mostrarEmTabela(pessoas.filter(p=>p.sexo === 'f'));
});

maiores.addEventListener('click', function(){
  mostrarEmTabela(pessoas.filter(p=>p.idade>18));
});

telMulheres.addEventListener('click', function(){
  mostrarEmTabela(pessoas.filter(p=>p.sexo=== 'f' && p.idade >= 18 && p.idade <= 25));
});
Nome <input type="text" id="nome"><br> 
Telefone <input type="text" id="telefone"><br> 
Idade <input type="number" id="idade"><br> 
Sexo M<input type="radio" id="m" name="sexo"> F<input type="radio" id="f" name="sexo"><br><br>

<div id="div"></div>

<br>Registre algumas pessoas do sexo feminino e use qualquer função<br><br>

<button id="mulheres">Mulheres</button>
<button id="registrar">Registrar</button>
<button id="maiores">Maiores</button>
<button id="telMulheres">Tel Mulheres</button>

References to the various modern javascript functionalities I've used

26.10.2017 / 01:28