Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

153
Views
Configurable product using javascript / jquery

Configurable Product

Hi,

I'm trying to generate configurable products for the selected attributes using JavaScript. I want to generate 3.0_Aluminium_1219, 3.0_Amber_1219, 3.8_Aluminium_1219 and 3.8_Amber_1219.

I have used the following script to store the option value in array

$('.complexSel').on('select2:select', function (e) {

        var obj = {}
        var keysArray = new Array();
        var price = $('.complexSel').find(':selected');
        $.each(price, function(index){
            keysArray.push($(this).attr('data-mst-id'));
            if($(this).attr('data-mst-id') in obj ) {
                obj[$(this).attr('data-mst-id')].push({id:$(this).val(),text:$(this).text()});
            }else{
                obj[$(this).attr('data-mst-id')] = new Array();
                obj[$(this).attr('data-mst-id')].push({id:$(this).val(),text:$(this).text()});
            }
        });
        var unique = keysArray.filter(function(itm, i, keysArray) {
            return i == keysArray.indexOf(itm);
        });
        console.log(obj);
        
    });

enter image description here

Please help me to achieve the result

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

used the following function to solve this issue.

$('.complexSel').on('change', function (e) {
            var obj = {}
            //var obj = new Array();
            var price = $('.complexSel').find(':selected');
            $.each(price, function(index){
                if($(this).attr('data-mst-val') in obj ) {
                    obj[$(this).attr('data-mst-val')].push($(this).text());
                }else{
                    obj[$(this).attr('data-mst-val')] = new Array();
                    obj[$(this).attr('data-mst-val')].push($(this).text());
                }
            });

            var cartesianRes = getCartesian(obj);
            console.log(cartesianRes);
            
            /* OUTPUT AS FOLLOWS*/
            /*
            [
                {
                    "Size": "3.0",
                    "Color": "Aluminum"
                },
                {
                    "Size": "3.0",
                    "Color": "Amber"
                },
                {
                    "Size": "3.8",
                    "Color": "Aluminum"
                },
                {
                    "Size": "3.8",
                    "Color": "Amber"
                }
            ]
            
            */
        });
        function getCartesian(object) {
            return Object.entries(object).reduce((r, [k, v]) => {
                var temp = [];
                r.forEach(s =>
                    (Array.isArray(v) ? v : [v]).forEach(w =>
                        (w && typeof w === 'object' ? getCartesian(w) : [w]).forEach(x =>
                            temp.push(Object.assign({}, s, { [k]: x }))
                        )
                    )
                );
                return temp;
            }, [{}]);
        }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!