【问题标题】:JavaScript: Array is undefinedJavaScript:数组未定义
【发布时间】:2011-04-07 11:34:14
【问题描述】:

我有一个多行变量,想随机选择一行:

$.get('namelist.txt', function(nameList) {
  name = nameList.split('\n');
  var i = random();
  alert(name[i]); // this is undefined
});

random() 函数返回一个随机数:

function random() {
  return Math.floor(Math.random()*201);
}

问题是警报显示undefined。如果我将第 3 行替换为 var i = 5,它会起作用。我用typeof 测试了i,它们在这两种情况下都是数字。有关如何解决此问题的任何想法?

【问题讨论】:

  • 也许 name 的元素少于 200 个?
  • 数组中是否有 200 项?
  • 真的想在你的函数中把var放在name前面。没有它,除非您在包含您引用的代码的范围内定义了name,否则您将覆盖window.name 属性(这几乎肯定不是您想要的)。一般来说,请务必声明您的变量,以免成为The Horror of Implicit Globals 的牺牲品。

标签: javascript jquery arrays


【解决方案1】:

您应该根据数组的长度生成一个随机数。 201 可能超过了数组的最高索引。

您可以调整随机函数以接受长度:

function random(len) {
    return Math.floor(Math.random() * len);
}

然后像这样使用它:

var name = nameList.split('\n');
var i = random(name.length);
alert(name[i]);

Array documentation reference

【讨论】:

  • 如函数 random() { return Math.floor(Math.random()*nameList.length); }
  • 只从这里删除-1 :)
  • @Kevin Nope。 random() 永远不会返回 1,因此它永远不会返回 10。在您的示例中,您可以获得 -1 作为结果
  • @Kevin: Math.random() 生成小于一的数字(例如 0.04),如果 'len' 为 10,则 Math.floor(0.4) == 0。如果从中减去 1,你会有一个无效的索引。
  • 问了一个问题,因为我怀疑自己和我的英语:stackoverflow.com/questions/5580579/javascript-math-random
【解决方案2】:

这是因为名字是一个数组

其中可能包含大约 3 个元素

如果随机函数的值大于 3,它会给你一个错误,就像你现在一样。

建议

先不改变数组中的任何元素和随机函数生成的数字。

if (name.length< randomnumber)
{
  //do logic what you want 
}

【讨论】:

    【解决方案3】:

    nameList.txt 中的文本是否可能少于 201 行?

    【讨论】:

      【解决方案4】:
      var i = Math.floor(Math.random()*name.length);
      

      【讨论】:

        【解决方案5】:

        你试过了吗

        var i = parseInt(random());

        ?

        【讨论】:

        • Math.floor 不返回字符串。
        猜你喜欢
        • 1970-01-01
        • 2013-09-13
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        相关资源
        最近更新 更多