2013-10-30 36 views
0

我想不通这是为什么不工作,应该返回与四个不同的值的数组,但它并不

$(document).ready(function (e) { 
    var randomNumbers = new Array(); 
    for (var i = 0; i < 4; i++) { 
     randomNumbers[i] = Math.floor((Math.random() * 9) + 1); 
     while ($.inArray(randomNumbers[i], randomNumbers) !== -1) { 
      randomNumbers[i] = Math.floor((Math.random() * 9) + 1); 
     } 
    } 
    for (var i = 0; i < randomNumbers.length; i++) { 
     if ($('#output').html() !== '') { 
      var existingOutput = $('#output').html(); 
      $('#output').html(existingOutput + randomNumbers[i]); 
     } else { 
      $('#output').html(randomNumbers[i]); 
     } 
    } 
}); 
+1

洗牌阵列'[0,...,9]'和切掉的前四个数字。 – Blender

回答

1

如果您生成一个号码,把它放在阵列中,难道你不觉得$.inArray()会告诉你吗?

您的while循环保证挂起。数组的成员(randomNumbers[i])当然总是在数组中。实际上,当调用$.inArray()来查看randomNumbers[i]是否在数组中时将返回i(如果它不在其他地方,则在这种情况下它不能)。你的循环不会超过第一个数字,所以它只会是0

+0

谢谢你的权利 – user2809051

0

我不明白你的while循环的重点。 inArray只返回-1,如果没有找到该值,它总是被找到,所以你只是为自己创建一个无限循环,这将继续重置生成的随机数。

如果你只是想4周随机数添加到div,这个工作对我来说:

$(document).ready(function (e) { 
    var randomNumbers = new Array(); 
    for (var i = 0; i < 4; i++) { 
     randomNumbers[i] = Math.floor((Math.random() * 9) + 1); 
    } 
    for (var i = 0; i < randomNumbers.length; i++) { 
     if ($('#output').html() !== '') { 
      var existingOutput = $('#output').html(); 
      $('#output').html(existingOutput + randomNumbers[i]); 
     } else { 
      $('#output').html(randomNumbers[i]); 
     } 
    } 
}); 

进一步重构:

$(document).ready(function (e) { 
    var randomNumbers = new Array(); 
    for (var i = 0; i < 4; i++) { 
     randomNumbers[i] = Math.floor((Math.random() * 9) + 1); 
    } 

    for (var i = 0; i < randomNumbers.length; i++) {  
     $('#output').append(randomNumbers[i]); 
    } 
}); 
2

能切出if和第二环通过追加加入的阵列

$(document).ready(function (e) { 
    var randomNumbers = new Array(); 
    for (var i = 0; i < 4; i++) { 
     var ran =newNum(); 
     /* unique check*/ 
     while ($.inArray(ran, randomNumbers) >-1){ 
      ran=newNum(); 
     } 
     randomNumbers.push(ran) 
    } 
    $('#output').append(randomNumbers.join('')) 

}); 

function newNum(){ 
    return Math.floor((Math.random() * 9) + 1); 
} 

备用解决方案N使用的混洗方法(在此post找到):

var a=[1,2,3,4,5,6,7,8,9]; 
function Shuffle(o) { 
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); 
    return o; 
}; 

$('#output').append(Shuffle(a).splice(0,4).join('')) 
+2

+1但是如果你使用'do-while'而不是'while',你可以摆脱重复。 –

+1

@BlueSkies酷...实际上从来没有用过它 – charlietfl