来自具有条件的数组的新数组......

New array from array with a condition …

我要改造:

a = [0.25, 0.375, 0.5, 0.5, 0.5]

进入:


a2 = [
       [0.25, 0.375],
       [0.5, 0.5],
       [0.5]
     ]

– 其中每行数组项的总和 <= 1

我想一些切片、减少处理就可以了,但我只是不知道在哪里插入条件……有什么帮助吗?

const a = [0.25, 0.375, 0.5, 0.5, 0.5];

const result = a.reduce(
    (acc, val) => {
        const last = acc[acc.length - 1];

        if (last.reduce((a, v) => a + v, 0) + val <= 1) {
            last.push(val);
        } else {
            acc.push([val]);
        }

        return acc;
    },
    [[]],
);

console.log(result);

var s = 0;
var start = 0;
var a2 = [];
for (var i = 0; i<a.length; i++) {
   if (s+a[i] <= 1) {
       s+=a[i];
   }
   else {
      if (i == start) {
         a2.push(a.slice(i,i);
      }
      else {
         a2.push(a.slice(start, i-1);
      }
      s = a[i]
      start = i;
   }
}

您可以使用约束函数来减少数组。

const
    add = (a, b) => a + b,
    constraint = sum => sum <= 1,
    array = [0.25, 0.375, 0.5, 0.5, 0.5],
    result = array.reduce((r, v) => {
        let last =  r[r.length - 1];
        if (!last || !constraint(last.reduce(add) + v)) r.push(last = []);
        last.push(v);
        return r;
    }, []);

console.log(result);