循环遍历数组并查找重复的数字

时间:2015-04-28 22:09:36

标签: javascript arrays

好的,我已经花了将近两天的时间来解决这个问题而且我放弃了。

我想要做的是创建一个0-17之间的随机数组,其中每个数字将重复一次 - 所以总共有36个数字。

我写了一个函数来检查一个数字出现的次数,如果它发生了两次,那么它返回false。

直到我得到一个未定义的数字,然后它就会中断......

以下是我所拥有的:

name 'SAMPLE2
'

我很确定我的myRand()函数中出现了问题

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

您缺少回报

return makeRand()

它没有返回,所以返回undefined

<强>更新

你的代码中又出现了一个错误。 0是假的,所以当rand为0时if (rand)返回false,因此0永远不会插入=&gt;无限循环

makeRand这样:

function makeRand() {
    var rand = checkNumberRepeat(Math.floor(Math.random()*18),numbers,2);

    if (rand !== false){
        return rand;
    } else {
        return makeRand();
    }   
}

已更新 jsfiddle:http://jsfiddle.net/nayish/c9sk9suc/4/

答案 1 :(得分:1)

我会采取不同的方法。

创建一个[0,0,1,1,2,2,...17,17]

数组
var numbers = [];

for(var i = 0 ; i <= 17 ; i++) {
  numbers.push(i);
  numbers.push(i);
}

遍历数组,使用随机元素交换当前元素:

for(var i = 0 ; i < numbers.length ; i++) {
  var rnd= Math.floor(Math.random()*numbers.length),
      tmp= numbers[rnd];

  numbers[rnd]= numbers[i];
  numbers[i]= tmp;
}

Fiddle 1

<小时/> 这很容易变成一个函数:

function randomize(start, stop, count) {
  var numbers = [];

  for(var i = start ; i <= stop ; i++) {
    for(var j = 0 ; j < count ; j++) {
      numbers.push(i);
    }
  }

  for(var i = 0 ; i < numbers.length ; i++) {
    var rnd= Math.floor(Math.random()*numbers.length),

    tmp= numbers[rnd];
    numbers[rnd]= numbers[i];
    numbers[i]= tmp;
  }

  return numbers;
} //randomize

对于您的示例,您可以这样称呼它:

numbers = randomize(0, 17, 2);

Fiddle 2