随机分割数组内的值

时间:2016-10-05 20:40:26

标签: javascript arrays random

我正在测试如何计算一组应收款在分成多个分期时的损失金额。 我有10,000个应收账款,我需要在1到12期分期内随机分配,对于每个分期付款,我都有一定比例的损失。

我已经创建了一个数组,用于保存分期付款及其价值[损失百分比,应收款项数量除以分期付款数量,分期付款组损失金额]以填充值[1,2]。

var instllmtGrp = {
     x1: [.10,0,0]
    ,x2: [.08,0,0]
    ,x3: [.06,0,0]
    ,x4: [.04,0,0]
    ,x5: [.03,0,0]
    ,x6: [.02,0,0]
    ,x7: [.01,0,0]
    ,x8: [.01,0,0]
    ,x9: [.01,0,0]
    ,x10: [.01,0,0]
    ,x11: [.01,0,0]
    ,x12: [.01,0,0]
};

当我尝试创建一个包含12个元素(即1/12分期)的数组并为每个元素设置1到10.000范围内的随机值时,我总共得到了超过10,000个值,因为数学为每个数组元素分配1 / 10.000的数字。

var parcelas = Array.from({length: 12}, () => Math.floor(Math.random() * (10000 - 1 + 1)) + 1);

有没有办法设置数组值总和的限制?或者指定随机值而不超过10.000?

2 个答案:

答案 0 :(得分:1)

在循环中创建值。创建每个值后,将其从总数限制中减去。



var limit = 10000;
var parcelas = [];
for (var i = 0; i < 11; i++) {
  var rand = Math.floor(Math.random() * (limit - 1)) + 1;
  parcelas.push(rand);
  limit -= rand;
}
parcelas.push(limit);
console.log(JSON.stringify(parcelas));
console.log('Sum = ', parcelas.reduce((a, b) => a + b, 0));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你声明你想要随机数加起来10000.在你的阵列和现有答案中,这些&#34;随机&#34;数字往往会下降。如果不需要,这里有一种方法可以获得随机(除了最后一个元素的软糖因子)数字加起来10000,并且没有下降的上限。

&#13;
&#13;
        var parcelas = [];
        var totalAmount = 10000;
        var sum = 0;
        var testSum = 0;
        for (var i = 0; i < 12; i++) {
            var val = Math.random();
            sum += val;
            parcelas.push(val);
        }

        for (var i = 0; i < 11; i++) {
            parcelas[i] = Math.round(parcelas[i] * totalAmount / sum);
            testSum += parcelas[i];
        }

        parcelas[11] = totalAmount - testSum;

        testSum += parcelas[11];

        console.log(parcelas.toString());
        console.log("Sum: " + testSum);
&#13;
&#13;
&#13;