我使用以下代码生成0到Totalfriends之间的随机数,我想得到随机数,但不应该重复。知道怎么样?
这是我正在使用的代码
FB.getLoginStatus(function(response) {
var profilePicsDiv = document.getElementById('profile_pics');
FB.api({ method: 'friends.get' }, function(result) {
// var result =resultF.data;
// console.log(result);
var user_ids="" ;
var totalFriends = result.length;
// console.log(totalFriends);
var numFriends = result ? Math.min(25, result.length) : 0;
// console.log(numFriends);
if (numFriends > 0) {
for (var i=0; i<numFriends; i++) {
var randNo = Math.floor(Math.random() * (totalFriends + 1))
user_ids+= (',' + result[randNo]);
console.log(user_ids);
}
}
profilePicsDiv.innerHTML = user_ids;
});
});
答案 0 :(得分:2)
yourarray
[1..totalfriends]
)
Fisher-Yates
算法的javascript实现)for
内(从0
到yourarray.length - 1
)从数组中创建pop()
(或只获取n-th
元素),这样您就可以获得每次都有不同的数字这样做可以避免重复数字
答案 1 :(得分:2)
这是一个函数,它将从array
中获取n个随机元素,并根据渔民的洗牌返回它们。请注意,它将修改array
参数。
function randomFrom(array, n) {
var at = 0;
var tmp, current, top = array.length;
if(top) while(--top && at++ < n) {
current = Math.floor(Math.random() * (top - 1));
tmp = array[current];
array[current] = array[top];
array[top] = tmp;
}
return array.slice(-n);
}
假设您的代码按照我的想法运行,您已经有了一系列用户ID:
var random10 = randomFrom(friendIds, 10);
答案 2 :(得分:0)
我会执行随机迭代,创建一个包含所有数字的数组,例如:
var friendIndexes = [];
for (var i=0; i<numFriends; i++)
{
friendIndexes.push(i);
}
然后,如果你有一个包含所有数字的数组,我会执行一些迭代次数,可能是1000次,你可以生成两个随机数,并交换这些索引中的值。
for (var s = 0; s<1000; s++)
{
var rnd1 = Math.floor(Math.random() * (numFriends + 1);
var rnd2 = Math.floor(Math.random() * (numFriends + 1);
// Swap the two values (remember to use a temp variable)
var tmp = friendIndexes[rnd1];
friendIndexes[rnd1] = friendIndexes[rnd2];
friendIndexes[rnd2] = tmp;
}
你实际上是在改组它们,结果会以随机的顺序给你数字。
答案 3 :(得分:0)
拿一大数不分钱的朋友或只是一个大素数(如一个:702038,727699,992700,1201046,1232255,2312734,3136255,4235414,6090515)然后去
var result=[] ;
var K=Math.floor((Math.random()*bigUnNumFreindsDivider) ;
for (var i=0; i<numFriends; i++)
{
result[i]=(i*bigUnNumFreindsDivider+K)%numFreinds ;
}
这应该可以正常工作。
答案 4 :(得分:-2)
此问题先前曾被问到: javascript to generate 50 no-repeat random numbers
你应该看看那里的答案。而不是50,将限制设置为numFriends,你应该有一个有效的解决方案。