【问题标题】:Javascript: Compute the number of product variants based on attributesJavascript:根据属性计算产品变体的数量
【发布时间】:2016-08-31 12:34:13
【问题描述】:

我想根据颜色、尺寸等属性生成产品可能具有的所有变体。我正在尝试在 javascript 中实现 profitphp 给出的solution,但不是得到想要的结果。

这是我实现的:

var data = [['red', 'blue', 'green'],['small', 'medium', 'large']];

result = generateVariants(data);
console.log(result);

function generateVariants(data,prefix) {
    if (typeof prefix === 'undefined') {
        prefix = '';
    }

    var result = [];
    var attribute = data.shift();

    $.each(attribute, function(key,val) {
        if (data instanceof Array && data.length > 0) {
            result = result.concat(generateVariants(data, val + ' '));
        }
        else {
            result.push(prefix + val);
        }
    });

    return result;
}

预期结果:

["red small", "red medium", "red large", "blue small", "blue medium", "blue large", "green small", "green medium", "green large"]

相反,我得到了这个:

["red small", "red medium", "red large", "blue", "green"]

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 您只需计算输入数组的笛卡尔积以获得可能的组合。也许这个链接可以提供帮助。看答案stackoverflow.com/questions/12303989/…
  • @Farooq 感谢您为我指明正确的方向。
  • 嘿检查我的代码here

标签: javascript algorithm e-commerce variants


【解决方案1】:

不是传递原始数组,而是克隆它并将克隆的数组作为参数传递。

 var data = [['red', 'blue', 'green'],['small', 'medium', 'large']];

    result = generateVariants(data);
    console.log(result);

    function generateVariants(data,prefix) {
        if (typeof prefix === 'undefined') {
            prefix = '';
        }

        var result = [];
        var attribute = data.shift();

        $.each(attribute, function(key,val) {
            if (data instanceof Array && data.length > 0) {




              // Instead of passing the original array, clone it and pass the cloned array as argument.
     _data = data.slice(0);



              result = result.concat(generateVariants(_data, val + ' '));
            }
            else {
                result.push(prefix + val);
            }
        });

        return result;
    }

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2019-06-26
    • 2019-01-23
    相关资源
    最近更新 更多