I have an array of Objects
const data = [
{code: 1, name: "Send OSMI SMS 1", category: "OSMI"},
{code: 2, name: "Send OSMI SMS 2", category: "OSMI"},
{code: 3, name: "Send OSMI SMS 3", category: "OSMI"},
{code: 4, name: "Send OSMI Email 1", category: "OSMI"},
{code: 5, name: "Send OSMI Email 2", category: "OSMI"},
{code: 6, name: "Send OSMI Email 3", category: "OSMI"},
{code: 12, name: "Send advices for cleaning 3.0 Email 1", category: "Advice"},
{code: 13, name: "Send advices for cleaning 2.4 Email 1", category: "Advice"},
{code: 14, name: "Send advices for cleaning 3M Email 1", category: "Advice"},
{code: 15, name: "Send advices for cleaning 3.0 Email 1", category: "Advice"},
{code: 16, name: "Send advices for cleaning 2.4 Email 1", category: "Advice"},
{code: 17, name: "Send advices for cleaning 3М Email 1", category: "Advice"},
{code: 18, name: "Send advices for cleaning 3.0 Email 2", category: "Advice"},
{code: 19, name: "Send advices for cleaning 3.0 Email 3", category: "Advice"},
{code: 20, name: "Emergency VC-1", category: null},
{code: 21, name: "Test", category: null},
{code: 22, name: "Telegram test", category: null}
]
How can I get a new array of object with a new key field - 'category' and values - names.
Something like this
[
{"OSMI" : ["Send OSMI SMS 1", "Send OSMI SMS 2", "Send OSMI SMS 3" ...]},
{"Advice" : ["Send advices for cleaning 2.4 Email 1", ...]},
{null : ["Emergency VC-1", "Test", "Telegram test"]},
]
Optimal Solution: You can iterate your array with reduce()
result = data.reduce(function (reduce, it) {
reduce[it.category] = reduce[it.category] || [];
reduce[it.category].push(it.name);
return reduce;
}, Object.create(null));
console.log(result);