功能需求

模拟考试选择题 答题结果集合
选择题每个选项分数不固定 选项个数不固定
输入选择题 所有选项 求答题有可能得到的所有分数

把选择题抽象成程序

//定义选择题
var arr = [
[1,2],
[2,3],
[4,5],
[6,7,8]
];

结题过程

let arr = [[1,2],[2,3],[4,5],[6,7,8]];
console.log("输入:");
console.log(arr);
//[[ 1,2],[2,3],[4, 5],[6,7, 8]]
list = arr.reduce(function(prev,cur,index,array){
let arr1 = [];
prev.forEach(item=>{
let arr2 = [];
if(!Array.isArray(item)){
arr2.push(item);
}else{
arr2 = item;
}
cur.forEach(val=>{
arr2.push(val);
let arr3 = [];
arr3 = [...arr2];
arr1.push(arr3);
arr2.splice(arr2.length - 1, 1);
});
});
return arr1;
});
console.log("输出组合结果:");
console.log(list);
//[[1,2,4,6],[1,2,4,7],[1,2,4,8],[1,2,5,6],[1,2,5,7],[1,2,5,8],[1,3,4,6],[1,3,4,7],[1,3,4,8],[1,3,5,6],[1,3,5,7],[1,3,5,8],[2,2,4,6],[2,2,4,7],[2,2,4,8],[2,2,5,6],[2,2,5,7],[2,2,5,8],[2,3,4,6],[2,3,4,7],[2,3,4,8],[2,3,5,6],[2,3,5,7],[2,3,5,8]]
//求和
var logArr = [];
list.forEach(item=>{
logArr.push(sum(item));
})
//数组去重
var logArr =logArr.filter(function(value,index,self){
return self.indexOf(value) ===index;
});
console.log("输出目标结果:");
console.log(logArr.sort((a,) => a - b));
//[13,14,15,16,17,18]
// helper function []求和
function sum(arr) {
return arr.reduce(function(prev, curr, idx,){
return prev + curr;
});
}

可用于测试类题目 计算得分范围 求集合交集 合集