Jquery grouping and getting multiple keys in json object?

Viewed 89

Data Source:

{
    "status": 1,
    "data": {
        "tierpricing": [
          { "product_id": "1", "product_name_en": "product 1" },
          { "product_id": "1", "product_name_en": "product 1" },
          { "product_id": "1", "product_name_en": "product 1" },
          { "product_id": "1", "product_name_en": "product 1" },
          { "product_id": "2", "product_name_en": "product 2" },
          { "product_id": "2", "product_name_en": "product 2" },
          { "product_id": "2", "product_name_en": "product 2" },
          { "product_id": "3", "product_name_en": "product 3" },
          { "product_id": "3", "product_name_en": "product 3" },
          { "product_id": "3", "product_name_en": "product 3" }
       ]
    }
}

Using the following for grouping by product name:

 var tierprice = data.data.tierpricing.reduce(function(result, current) {
    result[current.product_name_en] = result[current.product_name_en] || [];
    result[current.product_name_en].push(current);
    return result;
 }, {});

Using this to get all the products

for (var key of Object.keys(tierprice)) {   
    item = {}
    item ["product_name_en"] = key;
    tierproducts.push(item);
}

console.log(tierproducts);

Shows:

[ { product_name_en: "product 1" },
  { product_name_en: "product 2" },
  { product_name_en: "product 3" } ]

What I am seeking is:

[ { product_name_en: "product 1", product_id: "1" },
  { product_name_en: "product 2", product_id: "2" },
  { product_name_en: "product 3", product_id: "3"} ]
1 Answers

You can build a key which consists of both product_name_en and product_id for grouping and then split that key when building final result set, for instance:

let key = `${current.product_name_en}_${current.product_id}`

and:

let [product_name_en, product_id] = key.split('_');

var data = {
    "status": 1,
    "data": {
        "tierpricing": [{
            "product_id": "1",
            "product_name_en": "product 1"
        }, {
            "product_id": "1",
            "product_name_en": "product 1"
        }, {
            "product_id": "1",
            "product_name_en": "product 1"
        }, {
            "product_id": "1",
            "product_name_en": "product 1"
        }, {
            "product_id": "2",
            "product_name_en": "product 2"
        }, {
            "product_id": "2",
            "product_name_en": "product 2"
        }, {
            "product_id": "2",
            "product_name_en": "product 2"
        }, {
            "product_id": "3",
            "product_name_en": "product 3"
        }, {
            "product_id": "3",
            "product_name_en": "product 3"
        }, {
            "product_id": "3",
            "product_name_en": "product 3"
        }]
    }
};

var tierproducts = [];

var tierprice = data.data.tierpricing.reduce(function(result, current) {
  let key = `${current.product_name_en}_${current.product_id}`;
  result[key] = result[key] || [];
  result[key].push(current);
  return result;
}, {});

for (var key of Object.keys(tierprice)) { 
  item = {}
  let [product_name_en, product_id] = key.split('_');
  item ["product_name_en"] = product_name_en;  
  item ["product_id"] = product_id;
  tierproducts.push(item);
} 

console.log(tierproducts);

Related