demo
JavaScript
const input = [{
"type": "group1@action1",
"label": "labelA",
"placeholders": ["b", "a", "r"]
}, {
"type": "group1@action2",
"label": "labelB",
"placeholders": ["x", "y", "z"]
}, {
"type": "group2@action123",
"label": "labelC",
"placeholders": ["a", "b", "c"]
}];
var output = new Map;
input.forEach(element => {
group = element.type.substring(0,element.type.indexOf('@'));
action = element.type.substring(element.type.indexOf('@')-1, element.type.length)
if (!output.has(group)) {
output.set(group, [element]);
} else {
output.get(group).push(element);
}
});
console.log(Object.fromEntries(output));