-1

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

1
  • 5
    The second isn't a valid object. Please fix the desired output. I assume you want this: const data = { total_present: obj.map(o => o.total_present), total_overtime: obj.map(o => o.total_overtime) } Commented Jul 30, 2020 at 6:56

8 Answers 8

6

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

Sign up to request clarification or add additional context in comments.

Comments

4

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)}
]
)

Comments

4

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);

Comments

3

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);

Comments

3

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);

Comments

2
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};

Comments

2

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)

Comments

1

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]]
      }
   }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.