使用举例,有一批服装存在以下属性
颜色:[红色,绿色,蓝色],
尺码:[25尺码,35尺码],
面料:[尼龙,真丝,棉服],
现页面需要展示【红色,25尺码,尼龙】【红色,25尺码,真丝】等不重复属性组合共18种。
代码如下:
1、获取数组列表
let arrList = [['红','黄','蓝'],['25','37'],['纯棉','尼龙','真丝']]
2、放入转化函数
const getListAtriValues =(list) =>{
let randomList = list;
// 用于记录每个元素的长度
let lenAll = new Array(randomList.length);
// 记录每个元素指针的位置
let pointerAll = new Array(randomList.length).fill(0);
let resultSize = 1;
for (let i = 0; i < randomList.length; i++) {
let item = randomList[i];
lenAll[i] = item.length;
resultSize *= item.length;
pointerAll[i] = 0;
}
let result = [];
for (let i = 1; i <= resultSize; i++) {
let resultItem = [];
for (let j = 0; j <= pointerAll.length - 1; j++) {
resultItem.push(randomList[j][pointerAll[j]]);
}
result.push(resultItem);
// 现在需要挪动指针位置了
// 进行递归
pointerAll[pointerAll.length - 1]++;
for (let i = pointerAll.length - 1; i > 0; i--) {
if (pointerAll[i] >= lenAll[i]) {
pointerAll[i] = 0;
pointerAll[i - 1]++;
}
}
}
return result
}
3、转化结果
getListAtriValues(arrList)
孤陋寡闻了,有个东西叫笛卡尔集合,链接附上:
链接: link