我有一些脚本从服务器调用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]
但是我再次在块中获得重复。
答案 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.
我希望有所帮助。 如果您能提供示例代码,我可以提供更好的答案。