Reputation: 9
I have a Json data
var orign = {
users: [
{ name: "name1", id: "aaa1", classify: "depth1" },
{ name: "name2", id: "aaa2", classify: "depth1" },
{ name: "name3", id: "aaa3", classify: "depth2" },
]
}
I want to change json data like this
var result = {
"depth1" : [
{ name: "name1", id: "aaa1"},
{ name: "name2", id: "aaa2"},
],
"depth2" : [
{ name: "name3", id: "aaa3"},
],
}
how can I change this by Javascript?
Upvotes: 0
Views: 58
Reputation: 2286
This is quite similar question I posted a year ago here
Hope my answer could help
var origin = {
users: [
{ name: "name1", id: "aaa1", classify: "depth1" },
{ name: "name2", id: "aaa2", classify: "depth1" },
{ name: "name3", id: "aaa3", classify: "depth2" },
]
};
const reducer = (acc, item) => {
if (!acc[item.classify]) {
acc[item.classify] = [];
}
acc[item.classify].push({name: item.name, id: item.id})
return acc
}
const result = origin.users.reduce(reducer, {});
console.log(result)
Upvotes: 0
Reputation: 5054
You can do the following using reduce,
origin = {
users: [
{ name: "name1", id: "aaa1", classify: "depth1" },
{ name: "name2", id: "aaa2", classify: "depth1" },
{ name: "name3", id: "aaa3", classify: "depth2" },
]
}
res = origin.users.reduce((prev, curr) => {
const {classify, ...rest} = curr;
if(prev.hasOwnProperty(classify)) {
prev[classify].push(rest);
} else {
prev[classify] = [rest];
}
return prev;
}, {});
console.log(res);
Upvotes: 1