到此还未过滤不合格组合
过滤掉不符合要求的组合就是我们所需要的 题目结果
/**
* 已知一个无序数组 array,元素均为正整数。给定一个目标值 target,
* 输出数组中是否存在若干元素的组合,相加为目标值。
*/
let ar1r = [1, 2,3];//目标数组
/**
* 返回符合要求的组合
* @param {*} nums 组合位数 值 即 几个数相加
* @param {*} forArr 目标数组
*/
function forn (nums,forArr){
let data=[];
let temporaryData = "let data1 = [];"//临时数组
let forN = "";
const arrName = "ar1r"
function ifItem(nums) {
let narr = [];
for (let j = 0; j < nums; j++) {
narr.push(`n${j}`);
}
let nstr = narr.join("+");
let a = ` if(${nstr}==3){`;
let b = "";
for (let data1 = 0; data1 < nums; data1++) {
b+=`data1.push(j${data1});`;
}
a+=b;
a+="data.push(data1);"
return a;
}
for (let index = 0; index < nums; index++) {
forN += ` for (let j${index} = 0; j${index} < forArr.length; j${index}++) {
const n${index} = forArr[j${index}];`
if (index == nums - 1) {
forN += temporaryData;
forN += ifItem(nums)
}
}
for (let index = 0; index <= nums; index++) {
forN += "};"
}
eval(forN)
return data;
}
let fornArr = []//若干组和的 数组
for (let index = 1; index <=ar1r.length; index++) {
let s = forn(index,ar1r)
// fornArr= fornArr.concat(...s)
for (let index = 0; index < s.length; index++) {
const element = s[index];
fornArr.push(element)
}
}
console.log('fornArr :>> ', fornArr);//打印结果 到此还未过滤不合格组合