How many people are from each city ? (Javascript Object)

Issue

I’m trying to list an object in the following format but I can’t figure out how to enumarade the li or put them inside their own ol any help??

It looks like your post is mostly code; please add some more details.
It looks like your post is mostly code; please add some more details.

let myObj = [
      {
        name:"Pablo", 
        age:"39", 
        job:"retired", 
        city:"LA", 
    }, 
    {
        name:"Ernesto", 
        age:"20", 
        job:"student", 
        city:"LA", 
    }, 
    {
        name:"Katrina", 
        age:"25", 
        job:"lawyer", 
        city:"LA", 
    }, 
    {
        name:"Mario", 
        age:"55", 
        job:"doctor", 
        city:"Lancaster", 
    }, 
    {
        name:"Luigi", 
        age:"50", 
        job:"Server", 
        city:"Lancaster", 
    }, 
    {
        name:"Peach", 
        age:"10", 
        job:"street", 
        city:"Labrea", 
    }
    ];
    

    let target = document.getElementById('target');    
    let cityName = null;
    
    for(i=0;i<myObj.length;i++){ 
    
    if (cityName == null && myObj[i].city){
        target.innerHTML += `<h3 class="cityTitle">${myObj[i].city}</h3>`;      
      }
    
      if (cityName && cityName != myObj[i].city){    
        if (cityName) {
          target.innerHTML += `<h3 class="cityTitle">${myObj[i].city}</h3>`;      
        }    
        target.innerHTML += `<li>${myObj[i].name}</li>`;
       
      } else {
        target.innerHTML += `<li>${myObj[i].name}</li>`;
           
      }
    
      cityName = myObj[i].city;   
    
    }
 .cityTitle{
      border: 1px solid black;
    }

    h3{
      margin: 0;
      padding: 0px 10px;
      background-color: rgb(245, 185, 185);
    }
<div id="target"></div>

Expected:

LA

  1. Pablo
  2. Ernesto
  3. Katrina

Lancaster

  1. Mario
  2. Luigi

Labrea

  1. Peach

Solution

get unduplicated cities first, then do the loop to render.

// get unduplicated cities
const cities = [...new Set(data.map(person => person.city))];
//render html
cities.forEach(city => { 
   //get persons in city
   const persons = data.filter(person => person.city === city);
   target.innerHTML += `<h3 class="cityTitle">${city}</h3>`;
   target.innerHTML += persons.map(p => `<li>${p.name}</li>`).join('');
});

Answered By – Taurz

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published