let arr = [
917784,
890647,
403534.35,
737052,
787163.67,
987727.4,
901810.25,
1126575.7,
1037552,
624930,
1112400,
560710
]
/*查找一个数组中哪几个数,可以组合成目标数
*@method getWhichs
*@param {数组} arr 传入数组
*@param {参数类型} target 目标数
*@param {参数类型} stair 几个数组成
*@return {数组} 返回由哪几个数相加组成
*/
function getWhichs(arr, target, stair = 2) {
// 结尾处理,传递一个空数组进来
if (arr.length === 0) {return []}
// 需要多个数(两个以上)的数处理
if (stair > 2) {
let nextArr = getWhichs(arr.slice(1), target - arr[0], stair - 1)
if (nextArr.length !== 0) {
nextArr.unshift(arr[0])
return nextArr
} else {
return getWhichs(arr.slice(1), target, stair)
}
}
// 主要逻辑处理:小于两层时,直接搜索一遍,解决长度是1的数组
if(stair <= 2 && ~arr.indexOf(target) ){return [target]}
for (let i = 1; i < arr.length; i++) {
if(arr[0]+arr[i] === target){
return [arr[0], arr[i]]
}
}
// 递归本函数
let resArr = getWhichs(arr.slice(1), target)
// 增加层级
if (resArr.length === 0) {
return getWhichs(arr, target, ++stair)
} else {
return resArr
}
}
console.log(getWhichs(arr, 2949017.35))
console.log(getWhichs(arr, 3065937.95))
console.log(getWhichs(arr, 4072931.07))