生成没有相同编号的随机数选项卡

时间:2017-12-09 16:19:00

标签: javascript angular

我希望创建一个数字标签,但永远不会有相同的数字。 结果的例子[1,4,7,5,0,2,3,8,9,6]

我有这个错误:

  

超出最大调用堆栈大小

我认为它是由递归引起的,但我不知道该怎么做。

cardsAlreadyUsed = [1,4,7]

setNumCardsToUsed(cardsAlreadyUsed){
    var nbMin = 0; var nbMax = 9;
    var result = Math.floor((Math.random() * nbMax) + nbMin);
    var i = 0;

    while (i < cardsAlreadyUsed.length) {
      if (result == cardsAlreadyUsed[i]) {
        result = null;
        break;
      }
      i++;
    }
    if (result == null)
        setNumCardsToUsed(cardsAlreadyUsed);
    else
        cardsAlreadyUsed.push(result);

    return result;
};

2 个答案:

答案 0 :(得分:1)

实现目标所需的一种快速方法是改组一组独特的数组。

&#13;
&#13;
function generateNumber() {
    var array = [0,1,2,3,4,5,6,7,8,9];
    var currentIndex = array.length, temporaryValue, randomIndex;
    while (0 !== currentIndex) {

    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

function makeTab() {
   var toReturn = numseries[ tabCounter ];
   tabCounter++;
   return toReturn;
}


//Counter
var tabCounter = 0;

//Generate the series of number on the pageLoad
var numseries = generateNumber();

//Call to generate new tab
var newtab = makeTab();

console.log( newtab );
&#13;
&#13;
&#13;

所以基本上,在页面加载时,您会生成一系列唯一编号。

如果要生成新标签,可以调用函数makeTab();

答案 1 :(得分:0)

您可以根据最小值和最大值创建一系列数字,只需shuffle即可。

layoutSubviews