ProLuck
ProLuck

Reputation: 375

How to grouping value by key in object javascript

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

Answers (8)

ajobi
ajobi

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

Ilijanovic
Ilijanovic

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

Sven.hig
Sven.hig

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

Nina Scholz
Nina Scholz

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

Ashish Mishra
Ashish Mishra

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

Lewis
Lewis

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

Yanjan. Kaf.
Yanjan. Kaf.

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

Milad Ahmadi
Milad Ahmadi

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

Related Questions