Jason
Jason

Reputation: 67

get ids from json array

I'm having a hard time trying to figure out how to iterate through json data to gather all the duplicate Id's to display the "dateTimes" that match their Id.

enter image description here

for example, I need it to display similar to this: Regal Broward Stadium 12 & RPX 2017-09-20 13:30 2017-09-20 16:00 2017-09-20 18:35

Flipper's Hollywood Cinema 10 2017-09-20 12:40 2017-09-20 14:40 2017-09-20 16:35

I wrote a function that I think that would work for just one Id but I don't know how I would find all the matching Id's to display the dateTimes.

getShowtimes(data){

    var json = JSON.parse(data);

    for(let i = 0; json.theater.id; i++){

        if (json[i].theatre.id == 10863){

            json[i].theatre.dateTime;

        }

    }

}

right now i'm not using the function to display the results(cause it doesn't work ), I'm just using the code below.

<div class="showtime" *ngFor="let shows of show">
    <div *ngFor="let detail of shows.showtimes>
        <div *ngIf="detail.theatre.id == 10863">
            {{detail.theatre.name}}{{detail.dateTime}}
        </div>
    </div>
</div>

Upvotes: 2

Views: 6928

Answers (3)

Khabir
Khabir

Reputation: 5854

This could be a good solution:

let employees = [
    { "id": 1, "firstName":"John", "lastName":"Doe" },
    { "id": 2, "firstName":"Anna", "lastName":"Smith" },
    { "id": 3, "firstName":"Anna", "lastName":"Smith" },
    { "id": 4, "firstName":"Peter", "lastName":"Jones" }
];
    
let employeeIds = [];
employeeIds.push(...employees.map(emp => emp.id));
console.log(employeeIds); 

output of employeeIds is [ 1, 2, 3, 4 ]

let duplicateNames = employees
     .map(emp => emp['firstName'])
     .map((emp, i, final) => final.indexOf(emp) !== i && i)
     .filter(obj=> employees[obj])
     .map(emp => employees[emp]["firstName"])
console.log(duplicateNames); 

output of duplicateNames is [ 'Anna' ]

Upvotes: 3

kevguy
kevguy

Reputation: 4438

Maybe this can help:

const data = [
    { theatre: { id: "10863", name: "Regal Broward Stadium 12 & RPX", dateTime: "2017-09-20T13:30" }},
    { theatre: { id: "10863", name: "Regal Broward Stadium 12 & RPX", dateTime: "2017-09-20T13:30" }},
    { theatre: { id: "10863", name: "Regal Broward Stadium 12 & RPX", dateTime: "2017-09-20T16:00" }},
    { theatre: { id: "10863", name: "Regal Broward Stadium 12 & RPX", dateTime: "2017-09-20T18:35" }},
    { theatre: { id: "10863", name: "Regal Broward Stadium 12 & RPX", dateTime: "2017-09-20T21:00" }},
    { theatre: { id: "4089", name: "Flipper's Hollywood Cinema 10", dateTime: "2017-09-20T12:40" }},
    { theatre: { id: "4089", name: "Flipper's Hollywood Cinema 10", dateTime: "2017-09-20T14:40" }},
    { theatre: { id: "4089", name: "Flipper's Hollywood Cinema 10", dateTime: "2017-09-20T16:35" }}
];

let result = {};

data.forEach((item) => {
  if (!result.hasOwnProperty(item.theatre.id)) {
    result[item.theatre.id] = {
        name: item.theatre.name,
        dates: item.theatre.dateTime
    };
  } else {
    result[item.theatre.id].dates = result[item.theatre.id].dates + ' ' + item.theatre.dateTime;
  }
});


Object.keys(result).forEach((key) => {
  console.log(`${result[key].name} ${result[key].dates}`)
});

Upvotes: 1

Sajeetharan
Sajeetharan

Reputation: 222582

Use like this detail.theatre.id === '10863' because its a string,

<div *ngIf="detail.theatre.id === '10863'">
    {{detail.theatre.name}}{{detail.dateTime}}
</div>

Upvotes: -1

Related Questions