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:),这对我帮助很大。。