0

我想根据颜色、尺寸等属性生成产品可能具有的所有变体。我正在尝试在 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"]

任何帮助是极大的赞赏。谢谢。

4

1 回答 1

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;
    }
于 2016-08-31T13:19:06.350 回答