在做电商项目的管理后台的时候(当然,我说的是比较正规的,不是那种只是一个商品列表的那种电商),需要对用户选择的sku属性进行组合,得到商品的所有规格。那么这个功能应该怎么去做呢?我们可以把规格属性理解成多个数组,我们需要得到的就是这几个数组所有的组合方案,这个有点类似回溯算法,但好像又不是。
比如,我们要对["a","b","c"],["d","e","f"],["g","h"] 这三组属性进行组合。按照我们的思路就是 a->d->g,a->d->h,a->e->g,a->e->h
总结来说,就是遍历->再递归。
函数如下:
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)
注意:此处的深拷贝是一定要注意的,否则会在一个对象中追加。
运行结果: