JSFiddle - React, Tailwind, and code Playground

by Rahul Patil

JavaScript

Array.prototype.groupBy = function(prop) {
  return this.slice()/*mutate*/.reduce(function(groups, item) {
    var val = item[prop];
    groups[val] = groups[val] || [];
    groups[val].push(item);
    return groups;
  }, {});
}

var originalArray =  [
            {
                name: "some product",
                type: "other",
                options: [
                    {
                        label: "price",
                        value: 10
                    }
                ]
            },
            {
                name: "merge product",
                type: "merge",
                options: [
                    {
                        label: "size",
                        value: "L"
                    },
                    {
                        label: "color",
                        value: "white"
                    },
                ]
            },
            {
                name: "merge product",
                type: "merge",
                options: [
                    {
                        label: "size",
                        value: "XL"
                    },
                    {
                        label: "color",
                        value: "red"
                    },
                ]
            },
        ];
        console.log("original array");
        console.log(originalArray);
        console.log("grouped array");
        console.log(originalArray.groupBy('name'));
        console.log("original array to demonstrate that mutation is avoided");
        console.log(originalArray);