首页 > 解决方案 > 如何在数组中的项目数之间分配 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,如果有人能给我展示代码示例,我将不胜感激,如果这还不够,请告诉我,我会给出更多示例

标签: javascriptarraysractivejs

解决方案


如何首先制作相等的部分并将剩余值添加到其中一个项目。(或类似的东西)

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));


推荐阅读