$ .inArray()jQuery函数

时间:2013-10-30 01:33:06

标签: javascript jquery

我无法弄清楚为什么这不起作用,应该返回一个包含四个不同值的数组,但它不会

$(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]);
        }
    }
});

3 个答案:

答案 0 :(得分: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);
}

使用shuffle方法的替代解决方案(在此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(''))

答案 1 :(得分:1)

如果你生成了一个数字并且将它放入数组,你认为$.inArray()不会告诉你吗?

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

答案 2 :(得分:0)

我不明白你的while循环的意义。如果找不到值,inArray仅返回-1,它将始终被找到,因此您只需为自己创建一个无限循环,以便重置生成的随机数。

如果您只想尝试将四个随机数添加到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]);
    }
});