检测数组对象是否“正在使用中”

时间:2013-06-20 21:44:22

标签: javascript arrays random queue detection

我有一些脚本从服务器调用AJAX信息,然后将信息显示在页面上的块中。每隔8秒,这些块就会淡化为一组新的信息。

来自服务器的信息存储在一个固定队列中,每隔8秒就会向其推送一个新项目。

对于每个块我都会从该数组中获取一个随机项来显示。唯一的问题是我的积木得到了很多重复。

有没有办法检查并查看是否已从另一个块调用该数组项,如果有,它将继续查找另一个未使用的项。

    var queue = FixedQueue( 50 );

    $(document).ready(function() {
     $('.submit').click(function(){
      setInterval(function(){
       queue.push(fulltweet);
     },8000);
    });
   });

    setInterval(function(){
        randotime = intervals[Math.floor(Math.random()*intervals.length)];
            $('.block1', '.photo1:nth-child(1)').queue(function(){
                $(this).hide();
                $(this).html(queue[0]);
                $(this).fadeIn(2000);
                $(this).delay(randotime);
                $(this).dequeue();
            });
            $('.block1', '.photo1:nth-child(1)').fadeOut(2000);
    },randotime);

我正在根据队列的长度创建一个随机数,并使用它来调用queue[rando]但是我再次在块中获得重复。

1 个答案:

答案 0 :(得分:0)

首先,如果您不希望数组中有重复项,请不要让它们重复。在将新项目插入阵列之前,请控制它是否存在于阵列中。如果使用对象而不是基本类型(字符串,整数等),则使用相等操作可能不起作用。因此,在插入之前,如果给定元素存在于数组中,则需要函数检查,并且此函数必须使用比较两个给定对象的equals函数。

其次,javascript允许您在运行时向对象添加字段。因此,当一个块到达并显示一个对象时,您可以在该对象上放置一个字段。假设它的名字是'inuse'。

当块A到达对象时:

object.inuse = true;

当块B随机到达同一个对象时:

var object = pickRandomly();
while (object.inuse) {
    object = pickRandomly();
}
// here's the unique object which is not used by another block.

我希望有所帮助。 如果您能提供示例代码,我可以提供更好的答案。