`
/**
* @author 夜将尽
* @param rawArray 原始数组
* @param sumValue 目标和值
* @param firstNum 第一次随机的数字
* @param secondNum 第二次随机的数字
* @param thirdlyNum 第三次随机的数字
* @param tenDigitArray 通过第一次随机的数字过滤掉大于等于firstNum的数组内的项组成一个新的数组,(第二个数字的可选项)
* @param singleDigitArray 个位数可选数组
* @param allPermutations 和值的所有排列组合
* */
sumValueCombination(){
let rawArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let sumValue = 5;
let firstNum;
let secondNum;
let thirdlyNum;
let tenDigitArray;
let singleDigitArray;
let allPermutations=[];
//第一遍循环所有数组数据都符合条件
rawArray.map((rawAitem,rawAindex)=>{
firstNum = rawAitem;
//过滤掉和值减去第一遍循环数字得到的结果,使其小于等于得到的这个结果
tenDigitArray = rawArray.filter((rawAFitem,rawAFindex)=>{
return sumValue-firstNum>=rawAFitem
})
//经过第一位数字筛选后的数组
tenDigitArray.map((tenDitem,tenDindex)=>{
secondNum = tenDitem;
//过滤掉和值减去第一遍和第二遍循环数字得到的结果,使其等于得到的这个结果,只有这样才能凑齐和值答案,前两位确定之后,最后一位实际上相当于已经定死了
singleDigitArray = tenDigitArray.filter((tenDFitem,tenDFindex)=>{
return sumValue-firstNum-secondNum==tenDFitem
})
singleDigitArray.map((singleDitem,singleDindex)=>{
thirdlyNum = singleDitem;
//在这里拼接三位数字最后push进数组,数组的长度就是和值的所有排列组合
allPermutations.push(""+firstNum+secondNum+thirdlyNum);
})
})
})
console.log(allPermutations,"allPermutations")
}
`