Javascript 找到低于/等于给定极限的最高总和

Javascript 找到低于/等于给定极限的最高总和,javascript,Javascript,我有以下功能: function findHighestSum(numbers, limit) { let summations = []; combinations(numbers).forEach(function(combination) { summations.push(combination.reduce(function(summation, n) { summation += n; return summation; }

我有以下功能:

function findHighestSum(numbers, limit) {
    let summations = [];
  combinations(numbers).forEach(function(combination) {
    summations.push(combination.reduce(function(summation, n) {
        summation += n;
        return summation;
    }));
  });
  return summations.reduce(function(accumulator, x) {
    if (x > accumulator && x <= limit)
        accumulator = x;
    return accumulator;
  }, 0);
}
var对象=[12,23,14,35,24];
//调试器;
函数f(对象、和){
var curSum=对象[0];
var maxSum=0;
var start=0;
对于(变量i=1;isum&&startif(curSum您可以采用递归方法,通过迭代数组,检查临时数组是否具有正确的和,并对照结果检查较小的和或推到相同的和部分

函数组合(数组、和){
功能叉(i,p){
var s=p.reduce((a,b)=>a+b,0),
l=(结果[0]| |[])。减少((a,b)=>a+b,0);
if(i==array.length){
如果(s你能找到小提琴。
这完全有效。
我使用找到的算法查找数组中的所有组合:

function k_combinations(set, k) {
    var i, j, combs, head, tailcombs;
    if (k > set.length || k <= 0) {
        return [];
    }
    if (k == set.length) {
        return [set];
    }
    if (k == 1) {
        combs = [];
        for (i = 0; i < set.length; i++) {
            combs.push([set[i]]);
        }
        return combs;
    }
    combs = [];
    for (i = 0; i < set.length - k + 1; i++) {
        head = set.slice(i, i + 1);
        tailcombs = k_combinations(set.slice(i + 1), k - 1);
        for (j = 0; j < tailcombs.length; j++) {
            combs.push(head.concat(tailcombs[j]));
        }
    }
    return combs;
}

function combinations(set) {
    var k, i, combs, k_combs;
    combs = [];
    for (k = 1; k <= set.length; k++) {
        k_combs = k_combinations(set, k);
        for (i = 0; i < k_combs.length; i++) {
            combs.push(k_combs[i]);
        }
    }
    return combs;
}

任何项目顺序中的最高金额,或连续?任何顺序,我对这门语言都很陌生。我只找到连续的@DominicTobias
找到低于给定限制的最高金额
Erm,…50不低于50,但49是..@Keith我的意思是低于/等于。就像我的条件一样。更新的标题看起来像背包问题
let sum = findHighestSum([12,23,14,35,24], 50);
alert(sum);