例如,有一个数组:

[3, 8, 9, 2, 7, 5, 6, 5, 3, 11, 9, 17, 6, 5, 8, 4, 2, 7, 9, 12, 5, 16, 4]

算法:

let arr = []

3 + 8 + 9 + 2 > 20 (do not sum)
3 + 8 + 9 = 20 (sum and push to arr)
next
9 + 2 + 7 + 5 > 20 (do not sum)
9 + 2 + 7 < 20 (sum and push to arr)
next
5 + 6 + 5 + 3 + 11 > 20 (do not sum)
5 + 6 + 5 + 3 < 20 (sum and push to arr)
...

重点是,数组中有一定权重的文件,需要逐个合并,不超过20MB,合并后的数组组成一个新的array.

我try 使用以下代码来执行此操作,但我不知道如何设置我的条件.

var sum = (array) => (array.length === 0) ? 0 : array[0] + sum(array.slice(1));

推荐答案

您可以通过查看子集SUM进行分组.

Less Than

const
    add = (a, b) => a + b,
    lessThan = value => (r, v, i) => {
        if (!i || r.at(-1).reduce(add) + v >= value) r.push([v]);
        else r.at(-1).push(v);
        return r;
    },
    data = [3, 8, 9, 2, 7, 5, 6, 5, 3, 11, 9, 17, 6, 5, 8, 4, 2, 7, 9, 12, 5, 16, 4],
    result = data.reduce(lessThan(20), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Up to

const
    add = (a, b) => a + b,
    upTo = value => (r, v, i) => {
        if (!i || r.at(-1).reduce(add) + v > value) r.push([v]);
        else r.at(-1).push(v);
        return r;
    },
    data = [3, 8, 9, 2, 7, 5, 6, 5, 3, 11, 9, 17, 6, 5, 8, 4, 2, 7, 9, 12, 5, 16, 4],
    result = data.reduce(upTo(20), []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

我应该如何在此Angular 16应用程序中的方法中使用@ Hostspel?

使脚本兼容于其他YouTube URL格式

如果使用React Select ,如何将CSS类添加到元素中?

如何使用JavaScript动态地将CSS应用于ToDo列表?

在卡信息之间切换

为什么在集内和集外会产生不同的promise 状态(使用Promise.race)?

react 路由加载程序行为

窗口.getComputedStyle()在MutationObserver中不起作用

如何从隐藏/显示中删除其中一个点击?

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

如何在文本字段中输入变量?

React.Development.js和未捕获的ReferenceError:未定义useState

在浏览器中触发插入事件时检索编码值的能力

Phaserjs-创建带有层纹理的精灵层以自定义外观

MongoDB受困于太多的数据

基于产品ID更新条带产品图像的JavaScript命中错误

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

将相关数据组合到两个不同的数组中

如何根据查询结果重新排列日期

有没有办法通过使用不同数组中的值进行排序