【发布时间】:2026-01-27 13:10:01
【问题描述】:
这是一个 Javascript / jQuery 问题:
我正在尝试使用 jQuery.inArray 方法生成 1 到 21 之间的六个唯一随机数(不重复)。然后,这六个数字将用于从名为 logo1.jpg 到 logo21.jpg 的组中选择六个 .jpg 文件。
谁能告诉我我在这里做错了什么?
<div id="client-logos"></div>
<script src="http://code.jquery.com/jquery-1.5.js"></script>
<script type="text/javascript">
Show = 6; // Number of logos to show
TotalLogos = 21; // Total number of logos to choose from
FirstPart = '<img src="/wp-content/client-logos/logo';
LastPart = '.jpg" height="60" width="120" />';
r = new Array(Show); // Random number array
var t=0;
for (t=0;t<Show;t++)
{
while ( jQuery.inArray(x,r)
{
var x = Math.ceil(Math.random() * TotalLogos);
});
r[t] = x;
var content = document.getElementById('client-logos').innerHTML;
document.getElementById('client-logos').innerHTML = content + FirstPart + r[t] + LastPart;
}
</script>
提前谢谢...
【问题讨论】:
-
你确定这是对的吗?在我看来,围绕“while”循环的语法错误 - 缺少近括号 ...
-
另外,看起来你用每个随机图像一遍又一遍地更新完全相同的元素。这真的是你想要的吗?
-
@Pointy:他在重新分配之前将 innerHTML 设置为
content变量。 @Shaun:顺便说一句,在循环内修改 innerHTML 通常是不好的做法。在循环中生成 HTML 字符串,但在循环结束之前不要将其分配给元素。 -
@Andy E 哦,我明白了 - 好吧,这会起作用,但由于其他原因,这是一个坏主意,正如你所指出的 :-)
-
@Shaun 更好的方法是使用 Fisher-Yates(或 Knuth)洗牌 - 关于这个主题的 a Wikipedia article 非常容易理解。您将构建一个由 1 到 21 组成的数组,将其随机排列,然后从列表中选择前 6 个。
标签: javascript jquery arrays random unique