Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用动态数组生成随机百分比?_Javascript_Node.js_Meteor - Fatal编程技术网

Javascript 如何使用动态数组生成随机百分比?

Javascript 如何使用动态数组生成随机百分比?,javascript,node.js,meteor,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个对象的总数不能超过

假设我们有数据:

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%

您可以通过跟踪随机数可以命中的最大数,然后不断递减来实现这一点。理论上,这可以无限期地进行:

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

请参见

您可以通过跟踪随机数可以命中的最大数,然后不断递减来实现这一点。理论上,这可以无限期地进行:

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

请看

我不确定你想要达到什么目标,所以要想得出一个答案有点困难。但是你可以用我能想到的两种方法来做

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%。

我不确定你想要达到什么目的,所以要给出一个答案有点困难。但是你可以用我能想到的两种方法来做

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%。

您希望获得随机百分比,而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。

您希望获得随机百分比,而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。

百分比不能是随机的,也不能总和小于100%。您可以从间隔
[0,1]
中随机选取第一个,从
(x1,1]
中随机选取第二个,从
(x2,1]
中随机选取第一个,或者您可以将每个间隔限制为
[0,1/3]
@MichelFloyd,第一个随机数是
100
,然后其他两个都必须是零。实际上,我写错了第二个随机数,
[0,1-x1]
[0,1-x1-x2]
ty-guysss:),这对我帮助很大。百分比不能都是随机的,并且总和不能小于100%。你可以从区间
[0,1]
中随机选择第一个,从区间
(x1,1]
中随机选择第二个,从区间
(x2,1]
中随机选择第一个,或者你可以将每个区间限制为
[0,1/3]
@MichelFloyd,第一个随机数是
100
然后其他两个都必须是零。事实上,我写错了第二个随机数,
[0,1-x1]
[0,1-x1-x2]
ty-guysss:),这对我帮助很大。。