【问题标题】:Javascript set var inside varJavascript 在 var 中设置 var
【发布时间】:2018-02-10 01:34:14
【问题描述】:

我正在为 Discord 创建一个基本的掷骰子程序,我想知道如何在变量中设置变量。我可能把事情复杂化了,但我仍然想看看这是否可能,以及是否有更好的方法来做到这一点。这是我当前的代码:

    while (dice > 0) {
        var die = Math.floor(Math.random() * (7 - 1) + 1)
        console.log("roll: " + die + ", currently: " + dice)
        dice = dice - 1
        message.channel.sendMessage(die)
    }

所以目前这可以“很好地”完成这项工作。我正在寻找使用roll 变量存储dice 变量(定义掷多少骰子的部分)。我猜它会像 var roll = r.dice

基本上,我要做的就是将卷保存为不同的变量,以便在一条消息中发送它们。所以代码会将它们保存为 r.10 到 r.1,然后我可以将这些变量作为一条消息呈现 r.10 . . r.1

我使用的方法可以实现吗,还是有更好的方法?

【问题讨论】:

  • 你想要JS对象还是数组?
  • 您可能希望创建一个掷骰子数组。在这种情况下,将每个卷与数组的每个索引链接起来是微不足道的。要将其连接成一条消息,请执行以下操作: [2, 5, 6, 2, 6, 1, 6].map(function(value, index) { return "r." + (index + 1) + ":" + 值;}).join('\n');
  • 别管我说我需要变量内部变量帮助的部分,我发现了 (var roll = "r." + dice) 但是,还有更简单的方法吗?

标签: javascript bots discord


【解决方案1】:

你可以使用数组:

本示例将生成 10 个骰子,将它们添加到数组 roll 中,然后将数组作为单个消息输出。

var roll = [];
var dice = 10;
while (dice --> 0) {
  var die = Math.floor(Math.random() * 6 + 1);
  roll.push(die);
}
var output = roll.map((x, i) => {
  return 'r.' + (roll.length - i) + ': ' + x;
}).join('\n');

console.log(output);
//message.channel.sendMessage(output)

【讨论】:

  • 您好,感谢您帮助我,我有点了解发生了什么,但总而言之,谢谢您。我以前没有遇到的一个小问题是数字可以超过 6,例如 14、12、7、10。这可以解决吗?我不太清楚为什么会这样,我在代码中编辑的只是删除了“r”。和“:”将“\ n”替换为“,”,因此它输出了一个干净的数字行。有什么办法可以解决吗?
  • 您在删除: 时是否在(roll.length - i)x 之间留了一个空格?我能想到的让你得到高于 6 的结果的唯一原因是它是否将骰子数添加到结果中。
  • 是的,确实发生了。在你回应之前,我寻找了一种模式来帮助并看看是什么让它过去了,而不仅仅是一个''。不过,谢谢你的帮助。
【解决方案2】:
function doRolls(numRolls)
{ 
    var rolls = [];
    for (var i=0; i < numRolls; i++) {
      rolls.push(Math.floor(Math.random() * (7 - 1) + 1))
    }
    return rolls;
}

rolls = doRolls(10);

for (var i=0; i < rolls.length; i++) {
    console.log("roll: " + i + ", value: " + rolls[i])
    message.channel.sendMessage(rolls[i])
}

【讨论】:

    【解决方案3】:
    var rolls = []
    for (var n = 0; n < 10; n += 1) {
        var roll = Math.floor(Math.random() * 6) + 1;
        rolls.push(roll);
    }
    
    console.log(rolls);
    
    for (var n = 0; n < 10; n += 1) {
        console.log("Roll number", n, "->", rolls[n]);
    }
    

    【讨论】:

    • 来自评论:此答案被标记为低质量。虽然答案总是很受欢迎,但它确实有助于提供一些关于您的代码如何解决手头问题的信息。不是每个人都熟悉您的确切编码逻辑,但可能了解您的一般方法概念。为了帮助改进您的答案,请提供一些context surrounding it,并查看writing great answers 上的帮助文章以获取有关如何使您的答案重要的一些提示:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多