sku组合生成的函数
回溯算法sku

在做电商项目的管理后台的时候(当然,我说的是比较正规的,不是那种只是一个商品列表的那种电商),需要对用户选择的sku属性进行组合,得到商品的所有规格。那么这个功能应该怎么去做呢?我们可以把规格属性理解成多个数组,我们需要得到的就是这几个数组所有的组合方案,这个有点类似回溯算法,但好像又不是。
比如,我们要对["a","b","c"],["d","e","f"],["g","h"] 这三组属性进行组合。按照我们的思路就是 a->d->g,a->d->h,a->e->g,a->e->h
8.png

总结来说,就是遍历->再递归。
函数如下:

const _ = require("lodash");
let result = [];


let dataSource = [["a","b","c"],["d","e","f"],["g","h"]];

ergodic(0,[],dataSource[0]);

function ergodic(index,prefix,data) {
    data.forEach((dataItem)=>{
        let newPrefix = _.clone(prefix);
        newPrefix.push(dataItem);
        if(index<dataSource.length-1){
            ergodic(index+1,newPrefix,dataSource[index+1])
        }else {
            result.push(newPrefix)
        }
    })
}

console.log(result)



注意:此处的深拷贝是一定要注意的,否则会在一个对象中追加。

运行结果:
9.png

暂无评论