I have a Json structure as shown below
[ { "category_id": "C1", "category_name": "C1_Name", "item_id": "C1_I1", "item_name": "C1_I1_Name", "variant_id": "C1_I1_V1", "variant_name": "C1_I1_V1_ Name" }, { "category_id": "C1", "category_name": "C1_Name", "item_id": "C1_I1", "item_name": "C1_I1_Name", "variant_id": "C1_I1_V2", "variant_name": "C1_I1_V2_ Name" }, { "category_id": "C1", "category_name": "C1_Name", "item_id": "C1_I2", "item_name": "C1_I2_Name", "variant_id": "C1_I2_V1", "variant_name": "C1_I2_V1_ Name" }, { "category_id": "C1", "category_name": "C1_Name", "item_id": "C1_I2", "item_name": "C1_I2_Name", "variant_id": "C1_I2_V2", "variant_name": "C1_I2_V2_ Name" }, { "category_id": "C2", "category_name": "C2_Name", "item_id": "C2_I1", "item_name": "C2_I1_Name", "variant_id": "C2_I1_V1", "variant_name": "C2_I1_V1_ Name" } ]
I would like to group the Json level to N 'in javascript, for example by passing a list of keys. For example, giving category_id, item_id and variant_id, I expect the following answer:
[ { "category_id": "C1", "category_name": "C1_Name", "item": [ { "item_id": "C1_I1", "item_name": "C1_I1_Name", "variant": [ { "variant_id": "C1_I1_V1", "variant_name": "C1_I1_V1_ Name" }, { "variant_id": "C1_I1_V2", "variant_name": "C1_I1_V2_ Name" } ] }, { "item_id": "C1_I2", "item_name": "C1_I2_Name", "variant": [ { "variant_id": "C1_I2_V1", "variant_name": "C1_I2_V1_ Name" }, { "variant_id": "C1_I2_V2", "variant_name": "C1_I2_V2_ Name" } ] } ] } ]
Do you need help on how to do this?
I tried something like the following, but it groups together for one level. I would like it to be recursive.
function groupBy(collection, property) { var i = 0, val, index, values = [], result = []; for (; i < collection.length; i++) { val = collection[i][property]; index = values.indexOf(val); if (index > -1) result[index].push(collection[i]); else { values.push(val); result.push([collection[i]]); } } return result; }