每个实例都会调用唯一的随机数

时间:2015-02-17 06:55:11

标签: javascript jquery random

我想要一个从.1到1生成随机数的变量。在一个函数中,我想多次引用该变量,每个引用应该生成一个唯一的数字......如果那个漫游是有意义的。有些东西可以浏览它,但通常用C或其他语言。我在javascript中需要这个。

var randoms = Math.floor(Math.random() * 1) + .15;

我这里有这个代码,我在相同的函数中引用它约15次。 每次我希望数字不同。目前,这会产生一个唯一的数字,然后被使用15次。

我知道它必须简单,因为它是一个简单的概念,但我无法将其包围在其中。

一些指导会很棒。

也许某些背景会有所帮助。 在这里,我有一组条形变量,在时间轴上的某个点我需要它们以不同的时间触发宽度动画。

var randoms 下面的

需要针对所有条形元素调用每个实例进行更改。

var bar1 = $('#bar1'),
    bar2 = $('#bar2'),
    bar3 = $('#bar3'),
    bar4 = $('#bar4'),
    bar5 = $('#bar5'),
    bar6 = $('#bar6'),
    bar7 = $('#bar7'),
    bar8 = $('#bar8'),
    bar9 = $('#bar9'),
    bar10 = $('#bar10'),
    bar11 = $('#bar11'),
    bar12 = $('#bar12'),
    bar13 = $('#bar13'),
    bar14 = $('#bar14'),
    bar15 = $('#bar15')
    icon = $('.icon'), 
    randoms = Math.floor(Math.random() * 1) + .15;


    init = new TimelineMax();

    init.add ("chart" , "+=2")
    init.to(icon_1, 0.5, {alpha: '1'})
        .to(icon_2, 0.5, {alpha: '1'})
        .to(icon_3, 0.5, {alpha: '1'})
        .to(icon_4, 0.5, {alpha: '1'})
        .to(bar1, randoms, {width: '100%'},'chart')
        .to(bar2, randoms, {width: '100%'},'chart')
        .to(bar3, randoms, {width: '75%'},'chart')
        .to(bar4, randoms, {width: '90%'},'chart')
        .to(bar5, randoms, {width: '85%'},'chart')
        .to(bar6, randoms, {width: '100%'},'chart')
        .to(bar7, randoms, {width: '75%'},'chart')
        .to(bar8, randoms, {width: '90%'},'chart')
        .to(bar9, randoms, {width: '90%'},'chart')
        .to(bar10, randoms, {width: '70%'},'chart')
        .to(bar11, randoms, {width: '50%'},'chart')
        .to(bar12, randoms, {width: '85%'},'chart')
        .to(bar13, randoms, {width: '80%'},'chart')
        .to(bar14, randoms, {width: '90%'},'chart')
        .to(bar15, randoms, {width: '90%'},'chart');

4 个答案:

答案 0 :(得分:0)

这是一个从0.11.0创建随机数的功能:

var random = Math.floor(Math.random()*11) / 10 ;

Demo

如果要创建从0到n的随机数,请尝试:

var random = Math.floor( Math.random()* n+1 );

答案 1 :(得分:0)

您需要确定所需的唯一数字。然后,每次获得一个数字时,都会将其与之前的数字相匹配,以获得唯一性。最后,你将拥有一组独特的数字。对于介于.1到1之间的范围,Math.random()将随机值从0(包括)返回到1(不包括)。避免0使用if语句。

var counter = 10;
var uniqueNumbers = new Array();
interval = setInterval(function(){
    var x = Number(Math.random().toFixed(1));
    if(uniqueNumbers.indexOf(x) == -1  & x != 0.0){
        uniqueNumbers.push(x);
        console.log(uniqueNumbers);
    }
    if(uniqueNumbers.length == counter){
        clearInterval(interval);
    }
}, 1);

jsFiddle

另一种解决方案:

您还可以将代码包装在函数中,并在每次调用该函数时获取不同的值。请尝试以下代码,

HTML:

<button id="getRandom">Get Unique Number</button>

javaScript:

var counter = 0;
var numberLimit = 5;
var uniqueNumbers = new Array();

getRandom.onclick = function(){
    if(counter != numberLimit){
        CalculateRandom();
    }
};

function CalculateRandom(){
    var x = Number(Math.random().toFixed(1));
    if(uniqueNumbers.indexOf(x) == -1  & x != 0.0){
        uniqueNumbers.push(x);
        console.log(uniqueNumbers);
        counter++;
    } else if(counter != numberLimit){
        CalculateRandom();
    }
}

jsFiddle

[ 注意: 您也可以根据需要设置小数位。]

答案 2 :(得分:0)

首先,您的代码永远不会产生与0.15不同的值。您在随机值上调用Math.floor,立即将其转换为0.要生成.1到1之间的数字,请使用:

var randoms = Math.random() * 0.9 + 0.1;

其次,一旦设置了变量,它将永远不会更新并获得新值。您需要将上面的代码调用为您需要的数字。一旦实现这一点,就可以将其包装在一个函数中:

function randoms() {
    return Math.random() * 0.9 + 0.1;
}
console.log(randoms());

修改 以下是如何使用上述功能:

function randoms() {
    return Math.random() * 0.9 + 0.1;
}
init.to(icon_1, 0.5, {alpha: '1'})
        .to(icon_2, 0.5, {alpha: '1'})
        .to(icon_3, 0.5, {alpha: '1'})
        .to(icon_4, 0.5, {alpha: '1'})
        .to(bar1, randoms(), {width: '100%'},'chart')
        .to(bar2, randoms(), {width: '100%'},'chart')
        .to(bar3, randoms(), {width: '75%'},'chart')
        .to(bar4, randoms(), {width: '90%'},'chart')
        .to(bar5, randoms(), {width: '85%'},'chart')
        .to(bar6, randoms(), {width: '100%'},'chart')
        .to(bar7, randoms(), {width: '75%'},'chart')
        .to(bar8, randoms(), {width: '90%'},'chart')
        .to(bar9, randoms(), {width: '90%'},'chart')
        .to(bar10, randoms(), {width: '70%'},'chart')
        .to(bar11, randoms(), {width: '50%'},'chart')
        .to(bar12, randoms(), {width: '85%'},'chart')
        .to(bar13, randoms(), {width: '80%'},'chart')
        .to(bar14, randoms(), {width: '90%'},'chart')
        .to(bar15, randoms(), {width: '90%'},'chart');

答案 3 :(得分:0)

Nikola提供了我正在寻找的解决方案。我在代码中的随机拼写错误 - 创建一个刷新随机时间变量的函数的概念,然后调用动画的时间参数所在的特定函数,可以很好地工作。在这种情况下,我使用了tweenMax,但很容易转换为setInterval或任何数量的参数,每次调用时都需要更改一个变量。