简体   繁体   中英

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

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

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

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

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

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

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

 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)

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM