Given the current example array of objects:
const data = {
...otherData,
formGroups: [{roldependence: "a", rol2dependence: "", rol3dependence: "b"},{roldependence: "", rol2dependence: "1", rol3dependence: ""}]
}
I need to iterate through the objects and do 3 things: Delete empty objects Delete empty keys Modify key names and delete the word "dependence"
The new array should look like:
console.log(data.formGroups)
// [{ rol: "a", rol3: "b" }, { rol2: 1 }]
What I tried so far:
const newData = { ...data };
if (newData.formGroups) {
newData = {
...newData,
formGroups: newData.formGroups
.filter((element) => {
// Removing empty objects
if (Object.keys(element).length !== 0) {
return true;
}
return false;
})
.map((element) => {
const newElem = { ...element };
for (let key in newElem) {
// Remove dependence word
if (key.includes("dependence")) {
newElem[key.replace(/dependence([0-9]+)$/, "")] = newElem[key];
delete newElem[key];
}
// Remove empty keys
if (!newElem[key]) {
delete newElem[key];
}
}
return newElem;
}),
};
//Then the parsed "newData" will be used for something else...
Is there an elegant way to do this? I feel I'm mutating state in ways I shouldn´t.