Reputation: 375
I have problem when I wanna grouping my object value data by key
in javascript. I have data object like this.
my data :
const obj = [
{total_present: "35", total_overtime: "12"},
{total_present: "25", total_overtime: "5"},
{total_present: "15", total_overtime: "15"},
{total_present: "23", total_overtime: "13"},
{total_present: "31", total_overtime: "22"},
{total_present: "17", total_overtime: "15"},
{total_present: "19", total_overtime: "19"},
{total_present: "23", total_overtime: "14"},
{total_present: "24", total_overtime: "11"},
{total_present: "21", total_overtime: "10"}
];
and I wanna mannipulate it to this :
{
total_overtime: ["12", "5", "15", "13", "22", "15", "19", "14", "11", "10"]
total_present: ["35", "25", "15", "23", "31", "17", "19", "23", "24", "21"]
}
How it possible I make my data to like that?
If my explanation is incomprehensible, I apologize, and you can ask me again, Thank You
Upvotes: -1
Views: 133
Reputation: 3116
Assuming you want to achieve this:
const objGrouped = {
total_present: ["35", "25", "15", "23", "31", "17", "19", "23", "24", "21"],
total_overtime: ["12", "5", "15", "13", "22", "15", "19", "14", "11", "10"]
}
You can do this:
const objGrouped = {
total_present: obj.map(item => item.total_present),
total_overtime: obj.map(item => item.total_overtime),
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Upvotes: 6
Reputation: 14904
You can reduce it.
const obj = [
{total_present: "35", total_overtime: "12"},
{total_present: "25", total_overtime: "5"},
{total_present: "15", total_overtime: "15"},
{total_present: "23", total_overtime: "13"},
{total_present: "31", total_overtime: "22"},
{total_present: "17", total_overtime: "15"},
{total_present: "19", total_overtime: "19"},
{total_present: "23", total_overtime: "14"},
{total_present: "24", total_overtime: "11"},
{total_present: "21", total_overtime: "10"}
];
let result = obj.reduce((a,{total_present, total_overtime}) => {
a.total_present.push(total_present);
a.total_overtime.push(total_overtime);
return a;
},{total_present: [], total_overtime: []})
console.log(result);
Upvotes: 4
Reputation: 4519
const obje = [
{total_present: "35", total_overtime: "12"},
{total_present: "25", total_overtime: "5"},
{total_present: "15", total_overtime: "15"},
{total_present: "23", total_overtime: "13"},
{total_present: "31", total_overtime: "22"},
{total_present: "17", total_overtime: "15"},
{total_present: "19", total_overtime: "19"},
{total_present: "23", total_overtime: "14"},
{total_present: "24", total_overtime: "11"},
{total_present: "21", total_overtime: "10"}
];
resx=obje.reduce((res,cur)=>{
res["total_present"]= res["total_present"] || []
res["total_present"].push(cur.total_present)
res["total_overtime"]=res["total_overtime"] || []
res["total_overtime"].push(cur.total_overtime)
return res
},{})
console.log(resx)
Upvotes: 2
Reputation: 386604
You could reduce the array and take the entries for the result set.
const
array = [{ total_present: "35", total_overtime: "12" }, { total_present: "25", total_overtime: "5" }, { total_present: "15", total_overtime: "15" }, { total_present: "23", total_overtime: "13" }, { total_present: "31", total_overtime: "22" }, { total_present: "17", total_overtime: "15" }, { total_present: "19", total_overtime: "19" }, { total_present: "23", total_overtime: "14" }, { total_present: "24", total_overtime: "11" }, { total_present: "21", total_overtime: "10" }],
result = array.reduce((r, o) => {
Object.entries(o).forEach(([k, v]) => (r[k] = r[k] || []).push(v));
return r;
}, {});
console.log(result);
Upvotes: 3
Reputation: 724
var a = [] , b = [];
for(let i in obj){
a.push(obj[i].total_present);
b.push(obj[i].total_overtime);
}
var newArray = { total_present: a,total_overtime:b};
Upvotes: 2
Reputation: 14866
Try this
const list = [
{total_present: "35", total_overtime: "12"},
{total_present: "25", total_overtime: "5"},
{total_present: "15", total_overtime: "15"},
{total_present: "23", total_overtime: "13"},
{total_present: "31", total_overtime: "22"},
{total_present: "17", total_overtime: "15"},
{total_present: "19", total_overtime: "19"},
{total_present: "23", total_overtime: "14"},
{total_present: "24", total_overtime: "11"},
{total_present: "21", total_overtime: "10"}
];
const result = Object.entries(list[0]).map(([key]) => {
return {[key]: list.map(obj => obj[key])};
});
console.log(result);
Upvotes: 3
Reputation: 1725
const obj = [
{total_present: "35", total_overtime: "12"},
{total_present: "25", total_overtime: "5"},
{total_present: "15", total_overtime: "15"},
{total_present: "23", total_overtime: "13"},
{total_present: "31", total_overtime: "22"},
{total_present: "17", total_overtime: "15"},
{total_present: "19", total_overtime: "19"},
{total_present: "23", total_overtime: "14"},
{total_present: "24", total_overtime: "11"},
{total_present: "21", total_overtime: "10"}
];
console.log(
[
{total_present: obj.map(item => item.total_present)},
{total_overtime: obj.map(item => item.total_overtime)}
]
)
Upvotes: 4
Reputation: 29
you can use this code
let mapper={}
for(let item of obj){
for(let key in item){
if(mapper[key]){
mapper[key].push(item[key])
}else{
mapper[key]=[item[key]]
}
}
}
Upvotes: 1