如何用动态数组制作随机百分比?

时间:2016-06-27 04:51:25

标签: javascript node.js meteor

假设我们有数据:

var datas = [{animal:"chicken"}, {animal: "cow"}, {animal: "duck"}];
var after_massage = [];

datas.forEach(function(key){

   after_massage.push({animal: key.animal}, {percentage: randomPercent(); })

 })

现在我不知道如何给每个对象获得随机百分比,总共3个对象不能超过100%

3 个答案:

答案 0 :(得分:1)

您可以通过跟踪随机数可以达到的最大数量然后继续递减来实现此目的。从理论上讲,这可以无限地继续下去:

var datas = [{animal:"chicken"}, {animal: "cow"}, {animal: "duck"}];
var after_massage = [];
var max = 1;

var getRandomPercent = function(max) {
    var percentage = Math.random() * (max - 0) + 0;
    // every time we generate a random number, we'll decrement
    max = max - percentage;
    return percentage;
}

datas.forEach(function(key){
   after_massage.push({animal: key.animal, percentage: getRandomPercent(max) })
 });

console.log(after_massage);

请参阅JSFiddle

答案 1 :(得分:1)

我不确定你想要实现什么,所以有点难以制定答案。但你可以用我能想到的两种方式来解决这个问题。

1)按数组的长度分割1(即1/3 = 33%)然后生成一个随机数:

function generateRandomPercentage(arrayLength){
    var maxPercentageValue = (1 / arrayLength) * 100;
    return Math.floor(Math.random() * maxPercentageValue );
}

2)根据剩余的百分比,减少百分比值。

var percentUsed = 0;

datas.forEach(function(key){
   var randomPercent = generateRandomPercentage(percentageUsed );
   percentUsed = percentUsed + randomPercent ;
   after_massage.push({animal: key.animal, percentage: randomPercent })
 });

function generateRandomPercentage(percentageRemaining){
        var maxPercentageValue = (100 - percentageRemaining);
        return Math.floor(Math.random() * maxPercentageValue );
}

这两种方法都可以确保总和低于100%。

答案 2 :(得分:0)

你希望获得随机百分比,总共3个对象不能超过100%,所以需要通过这样的随机数减少百分比......

var datas = [{animal:"chicken"}, {animal: "cow"}, {animal: "duck"}];
var after_massage = [];
var percent = 100,
r = 0;
datas.forEach(function(key){    
   after_massage.push({animal: key.animal,percentage: randomPercent()});
 })

function randomPercent(){               
 percent = percent - r ;
 r = Math.floor(Math.random() * percent);
 return r;  
}
console.log(after_massage);

您将看到3个对象的总百分比不超过100个。