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());