Javascript:根据属性计算产品变体的数量

Javascript: Compute the number of product variants based on attributes

本文关键字:属性 计算 Javascript      更新时间:2023-09-26

我想根据产品的颜色、大小等属性生成所有可能的变体。我试图在javascript中实现profitphp给出的解决方案,但没有得到所需的结果。

下面是我实现的:

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"]

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

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

 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;
    }