【问题标题】:Detecting if array object is "in use"检测数组对象是否“正在使用”
【发布时间】:2013-06-20 21:44:21
【问题描述】:

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

【问题讨论】:

  • 你能发布你的代码吗?
  • 你为什么选择一个随机的而不是第一个?当您从队列中读取第一个值时,该值通常也被删除,第二个值成为第一个值。你永远不会选择两次相同的值。

标签: javascript arrays random queue detection


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2012-11-05
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多