需求:
在一定范围内,寻找最解决目标的组合类型
如:在7,1,3,4,2中找出最解决10的组合模式
const arr = [7, 1, 3, 2, 4]
const need = 10
function find(arr) {
let out = [] //输出目标
arr.map(function (v, i, a) {
if (v == need) {
// 当对象正等于目标
out.push([v])
} else if (v <= need) {
// 当对象不等于目标
let maxlength = arr.length - 1 - i;
const isout = function (add_index, add_val, isarr) {
add_index++
add_val = add_val == 0 ? v + a[add_index] : add_val + a[add_index]
if (add_val <= need) {
if (isarr.length <= 0)
isarr.push(v, a[add_index])
else {
isarr.push(a[add_index])
}
isout(add_index, add_val, isarr)
} else {
out.push(isarr)
}
}
const islength = function () {
let add_index = arr.length - maxlength - 1;
let add_val = 0
let isarr = []
isout(add_index, add_val, isarr)
maxlength--
if (maxlength >= 0) {
islength()
}
}
//触发方法
islength()
}
})
// 删选
const _out = []
out.map((v, i) => {
if (v.length > 0) {
_out.push(v)
}
})
return _out
}
const aa = find(arr)
console.log(aa)