Max subarray length which sum not bigger than the main array length

JavaScript

// Max subarray length which sum not bigger than the array (a) length
function maxLength(a) {
  // All subarrays
  let subarrays =
  a.reduce((acc, e, i) => {
    acc.push(
      // Array element
      [e],
      // Possible combinations
      ...a.reduce((acc_a, _, j) =>
        acc_a.concat(a.slice(j).reduce((acc_b, a_b) => {
          if (a.slice(i, j).length)
            acc_b.push([...a.slice(i, j), a_b]);
          return acc_b;
        }, [])), 
      []));

    return acc;
  }, []);
  
  console.log(subarrays)

  // Get the longest
  let max_length = 0;
  subarrays.forEach(sub => {
    const sum = sub.reduce((acc, n) => acc += n, 0);

    if (sum <= a.length && sub.length > max_length)
      max_length = sub.length;
  });

  return max_length;
}

document.body.textContent = maxLength([1,2,3,4]);