I have following array of objects with nested arrays in it. I wanted to traverse through those arrays and extract all those impact information to separate array:
this is how my input data looks like:
{
"violations": [
{
"impact": "serious",
"nodes": [
{
"any": [
{
"impact": "critical"
},
{
"impact": "serious"
}
],
"all": [
{
"impact": "moderate"
}
],
"none": [
{
"impact": "minor"
}
]
}
]
},
{
"impact": "serious",
"nodes": [
{
"any": [
{
"impact": "serious"
},
{
"impact": "minor"
}
],
"all": [
{
"impact": "moderate"
}
],
"none": [
{
"impact": "serious"
}
]
}
]
},
{
"impact": "serious",
"nodes": [
{
"any": [
{
"impact": "critical"
},
{
"impact": "critical"
}
],
"all": [
{
"impact": "moderate"
}
],
"none": [
{
"impact": "moderate"
}
]
},
{
"any": [
{
"impact": "critical"
},
{
"impact": "critical"
}
],
"all": [
{
"impact": "moderate"
}
],
"none": [
{
"impact": "moderate"
}
]
}
]
}
]
}
expected output:
[
{
"impact": "serious"
},
{
"impact": "critical"
},
{
"impact": "serious"
},
{
"impact": "moderate"
},
{
"impact": "minor"
},
{
"impact": "serious"
},
{
"impact": "serious"
},
{
"impact": "minor"
},
......
]
I’m currently trying with forEach loop like below:
const results = [];
violations.forEach(({ nodes, impact }) => {
results.push({ impact });
// flattening nodes
nodes.forEach(({ any, all, none }) => {
any.forEach((v) => results.push(v));
all.forEach((v) => results.push(v));
none.forEach((v) => results.push(v));
});
});
is there any better and shorter way to do the same?