Skip to content

#3 Combining datasets

Rick Groot edited this page Nov 12, 2020 · 2 revisions

Multiple arrays

Omdat ik meerdere datasets ga gebruiken moet ik verschillende datasets met elkaar vergelijken, en aanvullen. Door dit te doen kan ik bijvoorbeeld een locatie toevoegen bij een object zonder locatie. Daarvoor moet ik eerst de area ID's met elkaar vergelijken, zodat alleen de objecten met hetzelfde ID bij elkaar worden gezet. Hierbij heb ik verschillende dingen geprobeerd, die staan hieronder beschreven:

result1.forEach(itemArr1 => {
        if (itemArr1.areaid === result2.forEach(thing => {return thing.areaid})) {
            console.log('test 1 works')
        }
    })
//did't work
result1.forEach(itemArr1 => {
        for (i = 0; i > result2.length; i++) {
            if (itemArr1.areaid === result2[i].areaid) {
                console.log('test 2 works')
            }
            console.log(result2[i].areaid)
        }
    })
//didn't work
result1.forEach(itemArr1 => {

console.log(itemArr1.areaid);

        result2.forEach(itemArr2 => {
            if (itemArr1.areaid === itemArr2.areaid) {
                console.log('^^^ this one, ' + itemArr1.areaid + ' is double ^^^')
            }
        })
    })
//worked!

Met de laatste code kon ik de dubbele area ID's eruit halen. De volgende stap is om de juiste data in een object te zetten, in plaats van alleen iets te loggen.

One object

Om alle data in 1 object te krijgen moet ik de juiste data pushen naar een nieuwe array. In de nieuwe array ga ik allemaal objecten plaatsen die ik zelf heb gedefinieerd, dus met mijn eigen object velden. Ook moet ik de juiste data nog zien te krijgen, omdat de locaties meerdere velden hebben. Ik wil alleen de longitude en latitude hebben van de locatie, zodat ik die in het object kan pushen naar de clean array.

if (itemArr1.areaid === itemArr2.areaid) {
    let location = [itemArr2.location.latitude, itemArr2.location.longitude];
}

Bij deze if statement check ik nog steeds of de objecten een overeenkomende area ID hebben. Wanneer dit zo is wordt er uit itemArr2 de locatiedata gehaald, en wordt dit in een array geplaatst. Nu heb ik voor elke area die overeenkomt in de dataset ook de locatie data. Nu moet ik alleen de juiste data nog in een object zetten en pushen naar 1 array die alle opgeschoonde data heeft.

let compiled = [];

if (itemArr1.areaid === itemArr2.areaid) {

    let location = [itemArr2.location.latitude, itemArr2.location.longitude];

    compiled.push({
        areamanagerId: itemArr1.areamanagerid,
        areaId: itemArr1.areaid,
        capacity: itemArr1.capacity,
        chargingpointCapacity: itemArr1.chargingpointcapacity,
        disabledAccess: itemArr1.disabledaccess,
        maximumVehicleHeight: itemArr1.maximumvehicleheight,
        limitedAccess: itemArr1.limitedaccess,
        location: location,
        areaDesc: itemArr2.areadesc
    });
}

Met de code hierboven push ik bij elke overeenkomende ID een object met de data die ik zelf belangrijk vind. Zo heb ik de startDate eruit gelaten, en nog wel meer velden die ik niet nodig ga hebben. Deze objecten worden allemaal in de compiled array gestopt. Deze heeft nu dus clean data. Hierna return ik de code nog, zodat de data ook nog terug wordt gestuurd naar de variabele. De hele functie is hier te vinden. (Linkt naar FP repo)

Clone this wiki locally