Javascript 如何在数组中的项目数之间分配100

Javascript 如何在数组中的项目数之间分配100,javascript,arrays,ractivejs,Javascript,Arrays,Ractivejs,我在考虑循环算法,但我越来越困惑 以下是仅包含4项的示例 items[]: [ "item1": 100, "item2": 0, "item3": 0, "item4": 0, ] 基本上,我必须在4个项目中分配100个。总数必须始终为100,但每个项目必须有整数,不能有浮点数 items[]: [ "item1": 50, "item2": 17, "item3

我在考虑循环算法,但我越来越困惑

以下是仅包含4项的示例

items[]: [
"item1": 100,
"item2": 0,
"item3": 0,
"item4": 0,
]
基本上,我必须在4个项目中分配100个。总数必须始终为100,但每个项目必须有整数,不能有浮点数

items[]: [
"item1": 50,
"item2": 17,
"item3": 17,
"item4": 16,
]
如果添加一个新项目并为其赋值10,则总数将超过110,这将使我们超过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,
]
这里是另一个例子:我从上一个增加1到第二个项目

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=>{ 常量rem=输入%num; const val=Math.floorinput/num; 返回数组。从{length:num},z,i=>!i?val+rem:val; }; console.logitems101; console.logitems160;
console.logitems25 这就是我想要的:

function* splitNParts(num, parts) {
    let sumParts = 0;
    for (let i = 0; i < parts - 1; i++) {
        const pn = Math.ceil(0.5 * (num - sumParts))
        yield pn
        sumParts += pn
    }
    yield num - sumParts;
}

console.log…splitNParts23,2

这更像是一个数学问题,而不是一个JavaScript问题。如何分发?均匀随机分配,所以总数始终为100,每个项目必须有整个number@DanMullin我需要在Javascript中完成这项工作,它不能回答我的问题。。。最简单的方法是从1到100中随机选取一个,然后从1到100——前一个等等,最后只需将剩下的数字平均相加。但这并不能平均随机地分配它们,还要检查我给出的链接。是的,没有一个关于平均分配的词OP@FlashThunder我想这是随机分布的,总数等于100你是说答案?答案是关于均匀分布
function* splitNParts(num, parts) {
    let sumParts = 0;
    for (let i = 0; i < parts - 1; i++) {
        const pn = Math.ceil(0.5 * (num - sumParts))
        yield pn
        sumParts += pn
    }
    yield num - sumParts;
}