1.首先要考虑面对的问题,要用代码处理的问题
/**
* 部门安排所有组合
* @param departments: dict, key是部门名, value是每个部门对应所有员工ID数组
* 例 {'frontend': [1, 2], 'backend': [3, 4], 'devops': [5]}
* @param required_department: dict, 该任务需要参与的部门和需要的人数
* 例 {'frontend': 2, 'backend': 1}
* @return 所有可能的员工组合, 例 [[1, 2, 3], [1, 2, 4]]. 按员工ID升序排序
*/
const m=(department_staff_dict, required_staff) => {
var arrList= Object.keys(required_staff).map(key=>{
return s(department_staff_dict[key],required_staff[key])
})
return z(arrList);
}
// 将一个数组按照长度分成若干份
function s(arr, num) {
var arr1 = [];
var len = arr.length;
var more = len - num;
if (num == 1) {
return arr.map((item) => [item]);
}
// [1,2,3,4,5] 3
for (var i = 0; i < len; i++) {
for (var j = 0; j <= more - i; j++) {
arr1.push([
...arr.slice(i, num + i - 1),
...arr.slice(num + i - 1 + j, num + i + j),
]);
}
}
return arr1;
}
// 用数组每个元素中的一个元素拼接出最多的子数组
function z(arrList) {
var arr1 = [];
var arr2 = arrList.pop();
while (arrList.length) {
var arr3=arrList.pop();
for(var i=0;i<arr2.length;i++){
for(var j=0;j<arr3.length;j++){
arr1.push([...arr2[i],...arr3[j]])
}
}
arr2=arr1;
arr1=[]
}
return arr2.map(item=>item.sort((x,y)=>x-y))
}
console.log(m({'frontend': [1, 2], 'backend': [3, 4], 'devops': [5]},{'frontend': 2, 'backend': 1}))