javascript - 如何在数组中的项目数之间分配 100
问题描述
我正在考虑循环算法,但我越来越困惑。
以下是一个只有 4 个项目的示例
items[]: [
"item1": 100,
"item2": 0,
"item3": 0,
"item4": 0,
]
基本上,我必须在 4 个项目中分配 100 个。总数必须始终为 100,但每个项目必须有整数,不能有浮点数。
items[]: [
"item1": 50,
"item2": 17,
"item3": 17,
"item4": 16,
]
items[]: [
"item1": 27,
"item2": 17,
"item3": 40,
"item4": 16,
]
如果添加了一个新的 Item 并赋值为 10,则总数超过了 110,这给了我们 Excess of 10。额外的 10 必须从其他项目中取出10 / 4 = 2.5
,所以我们将 2.5 舍入到 3 并分配如下:
items[]: [
"item1": 27, (27 - 3)
"item2": 17, (17 - 3)
"item3": 40, (40 - 3)
"item4": 16, (16 - 1)
"item5": 10,
]
所以结果将如下所示:总数必须为 100
items[]: [
"item1": 24,
"item2": 14,
"item3": 37,
"item4": 15,
"item5": 10,
]
这是另一个例子:我从最后一个增加到第二个项目。
items[]: [
"item1": 24,
"item2": 14,
"item3": 37,
**"item4": 16,**
"item5": 10,
]
结果 1 将从第一项中扣除:
items[]: [
"item1": 23,
"item2": 14,
"item3": 37,
"item4": 16,
"item5": 10,
]
我不擅长 JavaScript,如果有人能给我展示代码示例,我将不胜感激,如果这还不够,请告诉我,我会给出更多示例
解决方案
如何首先制作相等的部分并将剩余值添加到其中一个项目。(或类似的东西)
const items = (input, num = 4) => {
const rem = input % num;
const val = Math.floor(input / num);
return Array.from({ length: num }, (_, i) => (!i ? (val + rem) : val));
};
console.log(items(101));
console.log(items(160));
console.log(items(25));
推荐阅读
- java - 如何在正则表达式中转义“[]”字符
- jquery - Animate.css 不适用于 Owl Carousel 幻灯片过渡
- c# - Linq 表达式在 Blazor 但不是控制台应用程序中引发错误
- python - Azure Data Bricks 中的多处理 - Python
- ios - HTTP 令牌登录并执行令牌
- ruby-on-rails - Rails 计算天和周的总持续时间
- nestjs - 将数据从拦截器共享到控制器的服务,而不作为函数参数从控制器传递到服务 [NestJS]
- bash - 如何在标准输出和文件中显示任何命令和/或脚本的执行输出,但在标准输出中保留颜色?
- python - 来自列表字典和字典列表组合的终端列表的输入 - 来自 json
- python - 如何解决此错误以在列表/字符串中弹出单词?(Python 3.x)