0

抱歉,如果帖子不清楚,我会尽力解释。我正在在线创建一个社会心理学实验,我需要一个能够随机选择不同名称的函数(如 John、Mike、Alex 等)。在网上寻找帮助时,我发现了这段代码:

function swapImages(){
  var $active = $('#myGallery .active');
  var $next = ($('#myGallery .active').next().length > 0) ? $('#myGallery.active').next() : $('#myGallery img:first');
  $active.fadeOut(function(){
  $active.removeClass('active');
  $next.fadeIn().addClass('active');
  });})

使用此代码和“mousetrap”库,我可以在按下键时更改名称。但是我不知道如何使名称随机出现(这意味着,不是按照它们在代码上的顺序,而是每次我这样做时都不同)。在 40 个不同的名称之后,我需要链接到另一个 html 页面。

感谢您的帮助,如果我的上一篇文章令人困惑,很抱歉……这是我的第一种编程方法:)

旧帖子:我对编程世界很陌生,我需要一些帮助,让这段代码选择随机项目,而不是按照我放置它们的顺序。另外,我从网上得到了这个,我需要它在 40 个项目后停止并链接到另一个页面。

谢谢您的帮助

4

1 回答 1

0

如果您只是需要选择随机名称 - 使用 Math.Random 从数组中选择是最简单的方法:

var names = ["John", "Mike", "Peter", "Sid", "Homer"]
var idx;

do {
    idx = parseInt(names.length * Math.random());
    alert(names[idx]);
    names.splice(idx, 1);
} while (names.length > 0)

基本上它在数组长度的边界内生成随机索引,选择该索引处的元素,然后从数组中删除该元素。当没有更多元素要显示时,循环退出。

演示:http: //jsfiddle.net/4NNTA/1/

如果您的列表有超过 40 个项目并且您需要在 40 之后退出 - 添加一个计数器和条件到while. 退出循环后,您可以通过设置location.href为要访问的页面的 URL 来重定向到另一个页面。

UPDATE这是一个使用上面修改过的代码的函数。它允许您指定任意数量的名称:

    var Names = function () {

        var data;
        var counter;

        function initData() {
            data = ["John", "Mike", "Peter", "Sid", "Homer"]
        }

        this.init = function (c) {
            counter = c;
            initData()
        }

        this.getName = function () {

            if (counter === 0) {
                return ""
            } else {

                if (data.length === 0) initData();

                var idx = parseInt(data.length * Math.random());
                var sName = data[idx]
                data.splice(idx, 1);

                counter--;
                return sName

            }
        }
    }

您可以在其中function initData指定名称数组。然后通过传递要显示的名称数来初始化它(本例将其初始化为 40):

var myNames = new Names();
myNames.init(40);

然后每次你打电话

myNames.getName()

它会给你下一个随机的名字。在数据用完之前,名称不会重复 - 然后重新初始化数组并重新开始随机未重复的名称。当检索到所有 40 个名称时 - 函数返回空字符串,您可以对其进行检查并采取相应措施。

于 2013-08-28T21:12:45.523 回答