Rose
Rose

Reputation: 600

How to group several JSON objects which contains array with same id together

Please help to figure out how can I group and display JSON objects. Here's my example:

var result = [
   {
    "data":
           [{
             "id": 1,
              "name": "aaa"
          }]
   },
   {
    "data": 
          [{
             "id": 2,
             "name": "bbb"
          }]
  },
  {
    "data": 
          [{
             "id": 1,
             "name": "cccc"
          }]
  },
  {
      "data": [{
          "id": 3,
          "name": "ddd"
      }]
  },
 {
     "data": [{
         "id": 2,
        "name": "eee"
     }]
}, 
 {
    "data": 
           [{
            "id": 3,
             "name": "fff"
          }]
}
]

I want to group the name which have the same id using jQuery. Hope you can help me to solve this issue. I would be very thankful for this.

Thank you in advance!

Upvotes: 0

Views: 2796

Answers (3)

madalinivascu
madalinivascu

Reputation: 32354

var result = [
   {
    "data":
           [{
             "id": 1,
              "name": "aaa"
          }]
   },
   {
    "data": 
          [{
             "id": 2,
             "name": "bbb"
          }]
  },
  {
    "data": 
          [{
             "id": 1,
             "name": "cccc"
          }]
  },
  {
      "data": [{
          "id": 3,
          "name": "ddd"
      }]
  },
 {
     "data": [{
         "id": 2,
        "name": "eee"
     }]
}, 
 {
    "data": 
           [{
            "id": 3,
             "name": "fff"
          }]
}
];

var groups={};

$.each(result,function(key,val){
    $.each(val.data,function(k,v){
        var id = v.id;
        if(groups[id]){

            groups[id]['name'].push(v.name);

        }else{
            groups[id] = {};
            groups[id]['name'] = [];
            groups[id]['name'].push(v.name);
            groups[id]['id'] = v.id;
        }



    });
});

console.log(groups);

jsfiddle: http://jsfiddle.net/jm3kr12w/1/

Upvotes: 1

Optimus
Optimus

Reputation: 2210

try this

var result = [
   {
       "data":
              [{
                  "id": 1,
                  "name": "aaa"
              }]
   },
   {
       "data":
             [{
                 "id": 2,
                 "name": "bbb"
             }]
   },
  {
      "data":
            [{
                "id": 1,
                "name": "cccc"
            }]
  },
  {
      "data": [{
          "id": 3,
          "name": "ddd"
      }]
  },
 {
     "data": [{
         "id": 2,
         "name": "eee"
     }]
 },
 {
     "data":
            [{
                "id": 3,
                "name": "fff"
            }]
 }
]
var tempArray = []

for(var i=0;i<result.length;i++)
{
    var o = null;
    var index = -1;

    for (var j = 0; j <tempArray.length; j++) {
        if (stackMethods.tempArray[j].Id == result[i].data[0].id) {
            index = j;
            o =tempArray[j];
            break;
        }
    }

    if(o!=null)
    {
        o.Names.push(result[i].data[0].name);

       tempArray[index] = o;
    }
    else {
        o = {};
        o.Id = result[i].data[0].id;
        o.Names = [];
        o.Names.push(result[i].data[0].name);
       tempArray.push(o);
    }

}

Upvotes: 0

Tuhin
Tuhin

Reputation: 3373

Try this. Hope will work for you.

var groups = {};

    $.each(result,function(key,val){
        var data=val.data;
        $.each(data,function(k,v){
            var id = v.id;
            if(groups[id]){
                groups[id].push(v);
            }else{
                groups[id] = [];
                groups[id].push(v);
            }
        });
    });

    console.log(groups);

Output

{
    "1": [
        {
            "id": 1,
            "name": "aaa"
        },
        {
            "id": 1,
            "name": "cccc"
        }
    ],
    "2": [
        {
            "id": 2,
            "name": "bbb"
        },
        {
            "id": 2,
            "name": "eee"
        }
    ],
    "3": [
        {
            "id": 3,
            "name": "ddd"
        },
        {
            "id": 3,
            "name": "fff"
        }
    ]
}

Working Fiddle

Upvotes: 0

Related Questions