代码审查---随机链接与内存 - Javascript

时间:2014-06-17 16:42:18

标签: javascript random google-sites

    var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
    var random = Math.round(Math.random() * 4);
    var previous = [];
    previous.push(random);
    return previous

    for (var i = 0; i < previous.length; i++) {
        while (previous[i] == random) {
            random = Math.round(Math.random() * 4);
        }
}
    window.location = links[random];

我正在尝试制作一个代码,用于将用户引导到一组网站中的随机网站。这将由谷歌网站中的按钮激活,我只是没有得到HTML部分。无论如何,当我尝试在jsfiddle中运行此代码时,输​​出只是一个空白屏幕。怎么了?这是我的逻辑

  1. 设定网站的数组。
  2. 'random'选择一个0到4之间的数字,它对应于数组中的网站
  3. 一个空数组
  4. 这会将'random的输出推送到空数组

  5. 此for循环检查空数组中是否有任何数据

  6. while循环显示“ok,如果随机选择数组'之前'中的数字,我将再次随机运行。
  7. 输出一个未选择的号码后,会打开一个新窗口到所选站点。
  8. 可悲的是,它并没有以这种方式表现。有什么提示吗?

    修改:Jsfiddle

2 个答案:

答案 0 :(得分:0)

我认为对代码的轻微修改可能会成功,特别强调删除循环:

var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
var previous = [];

function showLink() {
    if (previous.length !== links.length) {
      var random = Math.round(Math.random() * ((links.length - 1) - 0) + 0 );
      if (previous.indexOf(links[random]) > -1) {
        showLink(); 
      } else {
        console.log(links[random], previous)
        previous.push(links[random]);
      }
    } else {
        console.log('No more links');
    }
}

此时只需继续拨打showLink,直到用完链接为止。

Demo

答案 1 :(得分:0)

var links = ["http://www.google.com/", "http://www.cnn.com/", "http://www.bbc.com/", "http://www.nbc.com/"];
var random = Math.round(Math.random() * 4);
var previous = [];
previous.push(random);

for (var i = 0; i < previous.length; i++) {
    while (previous[i] == random) {
        random = Math.round(Math.random() * 4);
    }
}
window.location = links[random];

您错过了一个括号,并且在return循环之前有一个for语句。所以当然它没有工作,因为return语句下的代码无法像你编写的那样无法访问。