Javascript - 多个不等随机数生成器

时间:2017-04-25 16:10:57

标签: javascript canvas random slice splice

我正在尝试编写一个在给定范围内产生四个不等随机数的函数,但该函数当前在while (selection[i] in selection.slice().splice(i)行失败。此行应检查当前(i')值是否由任何其他随机值共享,但此刻它似乎什么都不做 - 可能是我错误地使用了in?任何帮助将不胜感激。

function contains(a, obj) {
  for (var i = 0; i < a.length; i++) {
    if (a[i] === obj) {
    return true;
    }
  }
  return false;
}

selected=[];

function randomSelection() {

  var notselected=[];
  for (var i=0; i<25; i++) {
    if(!contains(selected, i)) {
        notselected.push(i);
    }
  }
  var selection=[notselected[Math.floor(Math.random() * notselected.length)],
                             notselected[Math.floor(Math.random() * notselected.length)],
                             notselected[Math.floor(Math.random() * notselected.length)],
                             notselected[Math.floor(Math.random() * notselected.length)]];

  for (var i=0; i<selection.length; i++) {
    while (selection[i] in selection.slice().splice(i)) {
      alert('Hello!')
      selection[i] = notselected[Math.floor(Math.random() * notselected.length)];
    }
  }
  for (var i=0; i<selection.length; i++) {
    selected.pop(selection[i]);
  }
}

2 个答案:

答案 0 :(得分:2)

您可以使用以下方法获取两个数字之间的随机值

function getRandomArbitrary(min, max) {
   return Math.floor(Math.random() * (max - min)) + min;
}

如果值必须是整数,则可以使用以下方法:

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min)) + min;
}

因此,假设您需要4个不同的随机整数值,您可以执行类似的操作

var randoms = [];
while(randoms.length < 4) {

  var random = getRandomInt(0, 25);

  if(randoms.indexOf(random) === -1) {
    randoms.push(random);
  }
}

答案 1 :(得分:0)

随机随机播放一组对象(本例中为数字)

&#13;
&#13;
    var values = [0,1,2,3,4,5,6];
    function shuffle(arr){
        var temp = [...arr];
        arr.length = 0;
        while(temp.length > 0){
            arr.push(temp.splice(Math.floor(Math.random() * temp.length),1)[0]);
        }
        return arr;
    }
    console.log("pre shuffle : [" + values.join(", ") + "]"); 
    shuffle(values);
    console.log("post shuffle : [" + values.join(", ") + "]"); 
&#13;
&#13;
&#13;