仅将值分配给id一次

时间:2013-12-10 05:32:23

标签: javascript jquery random

我的问题一直困扰着我一段时间。

我有14个div,每次页面加载时必须分配一个随机ID(1到14之间)。 这些div中的每一个都有类" .image-box"我尝试分配的ID的格式是' box14'

我有JS代码正在分配随机ID,但我无法获得相同的ID来分配两次。

的JavaScript

var used_id = new Array();

    $( document ).ready(function() {
        assign_id();

        function assign_id()
        {
            $('.image-box').each(function (i, obj) {
                random_number();
                function random_number(){
                number = 2 + Math.floor(Math.random() * 14);
                var box_id = 'box' + number;

                if((box_id.indexOf(used_id) !== -1) === -1)
                    {
                        $(this).attr('id',box_id);
                        used_id.push(box_id);
                    }


                else
                    {
                    random_number();
                    }   
                }
            });

        }

    });

感谢您的帮助,

干杯

5 个答案:

答案 0 :(得分:4)

嗯,random...

在分配ID时,只需使用增量更新的计数器,而不是使用随机生成的数字(根据您的体验,可能会随机重复值)。

function assign_id() {
    var counter = 0;
    $('.image-box').each(function (i, obj) {
       $(this).attr('id','image-box-' + counter++); }   
    });
}

答案 1 :(得分:2)

我认为这就是你想要的和DEMO

$(document).ready(function() {
    assign_id();
});
function assign_id() {
    var numberOfDiv = $('.image-box').length;
    var listOfRandomNumber = myFunction(numberOfDiv);
    $('.image-box').each(function(i, obj) {
        $(this).attr("id",listOfRandomNumber[i]);
    });
};

//Getting List Of Number contains 1 to the number of Div which is 
//14 in this case.
function myFunction(numberOfDiv ) {
    for (var i = 1, ar = []; i < numberOfDiv +1 ; i++) {
        ar[i] = i;
    }
    ar.sort(function() {
        return Math.random() - 0.5;
    });
    return ar;
};

答案 2 :(得分:0)

我建议你有一个像user_id这样的全局数组,并将指定的div id推入数组。然后你可以在将随机id分配给div之前进行检查。如果分配使用不同的。

希望这有帮助。

干杯。

答案 3 :(得分:0)

如果您要做的只是分配唯一值,最好使用增量值(或类似(new Date).getTime())。但是,如果由于某种原因,你必须有随机选择的值(仅从1到14),那么使用这样的东西来选择唯一/随机值

var arrayId = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];

function getRandomId(array) {
    var randomIndex = Math.floor(Math.random() * (array.length));
    var randomId = array.splice(randomIndex, 1);
    return randomId[0];
}

现在getRandomId(arrayId)将从数组中返回一个随机选择的值,然后删除该值,以便不重复该值。

答案 4 :(得分:0)

首先介绍如何使用我的实现:

var takeOne = makeDiminishingChoice(14);

在这种情况下,takeOne是一个函数,您最多可以调用14次以获得1到14之间的唯一随机数。

例如,这将以随机顺序输出1到14之间的数字:

for (var i = 0; i < 14; i++) {
        console.log(takeOne());
}

以下是makeDiminishingChoice本身的实现:

var makeDiminishingChoice = function (howMany) {

        // Generate the available choice "space" that we can select a random value from.
        var pickFrom = [];
        for (var i = 0; i < howMany; i++) {
                pickFrom.push(i);
        }

        // Return a function that, when called, will return a value from the search space,
        // until there are no more values left.
        return function() {

                if (pickFrom.length === 0) {
                        throw "You have requested too many values. " + howMany + " values have already been used."
                }

                var randomIndex = Math.floor(Math.random() * pickFrom.length);
                return pickFrom.splice(randomIndex, 1)[0];
        };
};