js 二维数组排列组合--回溯算法
程序员文章站
2022-05-21 23:18:37
...
前言
前2天接到了个图表统计的功能,而这个图表展示有个需求,需要根据所选的维度,计算出维度组合数量并展示出来。实际需求场景如下:
比如有下面数据:
const dim1 = [{ id: 1, name: '维度1' }, { id: 2, name: '维度2' }];
const dim2 = [{ id: 3, name: '维度3' }, { id: 4, name: '维度4' }];
//...dim[n] = [xxxxxxx]
我们要做的功能,就是要计算dim1、dim2、dim[n]之间有多少种组合,比如:
两个维度下:
三个维度下:
const dim1 = [{ id: 1, name: '维度1' }, { id: 2, name: '维度2' }];
const dim2 = [{ id: 3, name: '维度3' }];
const dim3 = [{ id: 5, name: '维度5' }, { id: 6, name: '维度6' }];
//...dim[n] = [xxxxxxx]
废话不多说,直接先上代码
const getDimComb = (doubleList = []) => {
if (doubleList.length == 0) return [];//先return掉空的
const result = [];//最终组合集
/**
* doubleList 二维数组 Array
* index 当前所在步骤
* currentList 当前累积维度的数组
*/
const _back = (doubleList, index, currentList) => {
//判断是否到了最底层
if (index >= doubleList.length) {
result.push([...currentList]);
} else {
//循环递归
doubleList[index].forEach(item => {
//累加当前数组
currentList.push(item);
//递归
_back(doubleList, index + 1, currentList)
currentList.pop();
});
}
}
_back(doubleList, 0, []);
return result;
}
const result = getDimComb([
[{ id: 1, name: '维度1' }, { id: 2, name: '维度2' }],
[{ id: 4, name: '维度4' }, { id: 5, name: '维度5' }]
]);
console.log('不同维度组合之间共有 '+result.length+' 种组合方式');
console.log(result)
// 不同维度组合之间共有4种组合方式
// [
// [{ id: 1, name: '维度1' }, { id: 4, name: '维度4' }],
// [{ id: 1, name: '维度1' }, { id: 5, name: '维度5' }],
// [{ id: 2, name: '维度2' }, { id: 4, name: '维度4' }],
// [{ id: 2, name: '维度2' }, { id: 5, name: '维度2' }]
// ]
解析:
作者暂时还没空写,后续补充
上一篇: 【算法】排列组合问题
下一篇: PHP实现排列组合算法