0

我有一些脚本从服务器调用 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],但我再次在块中得到重复项。

4

1 回答 1

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.

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

于 2013-06-20T21:52:21.380 回答