Below is my data, which is an array of objects.
const myArray = [
{name: "Dave", date: "2020-07-30T17:30:46.180Z", score: 50, age: 20},
{name: "Dave", date: "2020-06-30T17:30:26.160Z", score: 35, age: 20},
{name: "Cosmo", date: "2020-06-30T17:30:26.160Z", score: 65, age: 22},
{name: "Dave", date: "2020-05-30T15:30:16.160Z", score: 65, age: 20},
{name: "Carlos", date: "2020-07-30T17:30:46.180Z", score: 70, age: 28},
{name: "Carlos", date: "2020-06-30T17:30:26.160Z", score: 53, age: 28},
];
The expected result is to make sure each individual has a score for each date. The score should be null when the date is missing for the individual.
Expected result
[
{name: "Dave", date: "2020-07-30T17:30:46.180Z", score: 50, age: 20},
{name: "Dave", date: "2020-06-30T17:30:26.160Z", score: 35, age: 20},
{name: "Dave", date: "2020-05-30T15:30:16.160Z", score: 65, age: 20},
{name: "Cosmo", date: "2020-06-30T17:30:26.160Z", score: 65, age: 22},
{name: "Cosmo", date: "2020-07-30T17:30:46.180Z", score: null, age: 22},
{name: "Cosmo", date: "2020-05-30T15:30:16.160Z", score: null, age: 22},
{name: "Carlos", date: "2020-07-30T17:30:46.180Z", score: 70, age: 28},
{name: "Carlos", date: "2020-06-30T17:30:26.160Z", score: 53, age: 28},
{name: "Carlos", date: "2020-05-30T15:30:16.160Z", score: null, age: 28}
];
My attempt to solve this problem can be found below. It didn't really work. What changes should I make?
const myArray = [
{name: "Dave", date: "2020-07-30T17:30:46.180Z", score: 50, age: 20},
{name: "Dave", date: "2020-06-30T17:30:26.160Z", score: 35, age: 20},
{name: "Cosmo", date: "2020-06-30T17:30:26.160Z", score: 65, age: 22},
{name: "Dave", date: "2020-05-30T15:30:16.160Z", score: 65, age: 20},
{name: "Carlos", date: "2020-07-30T17:30:46.180Z", score: 70, age: 28},
{name: "Carlos", date: "2020-06-30T17:30:26.160Z", score: 53, age: 28},
];
  
// Get unique dates
const getUniqueDates = (data) => {
    let temp = [];
    data.forEach(el => {
        if (temp.indexOf(el.date) === -1) {
            temp.push(el.date);
        }
    })
    return temp;
}
const myDates = getUniqueDates(myArray);
// Use a nested loop to verify whether date exists or not and insert objects
const getCleanData = () => {
    let temp = [];
    myDates.forEach(el => {
        for (let i = 0; i < myArray.length; i++) {
            let obj = {};
            obj['name'] = myArray[i].name;
            obj['age'] = myArray[i].age;
            if (el === myArray[i].date && typeof myArray[i].date !== 'undefined') {
                obj['score'] = myArray[i].score;
                obj['date'] = myArray[i].date;
                temp.push(obj);
            } else {
                obj['score'] = null;
                obj['date'] = el;
            }
        }
    })
    return temp;
}
console.log(getCleanData()); 
     
     
     
    