【问题标题】:Picking more than one random from an array从数组中选择多个随机数
【发布时间】:2016-11-12 08:43:25
【问题描述】:

我写了这个函数:

function randomProduct(num) {
  var iter = num;
  for (var i = 0; i < iter; i++) {
    var rand = recommendedProducts[Math.floor(Math.random() * recommendedProducts.length)];
    return rand
  }
}

应该从recommendedProducts 数组中提取,但是在调用函数时需要很多。所以基本上randomProduct(1)拉1randomProduct(4)拉4,等等。

但是,无论我通过控制台输入什么数字,我总是只返回 1 个数组项。

console.log(randomProduct(1));
console.log(randomProduct(2));
console.log(randomProduct(3));
console.log(randomProduct(4));

我做错了什么?

【问题讨论】:

  • 在调试器中运行它或在脑海中运行它。您在循环内返回,因此它始终返回一项并退出。
  • 预期结果是数组还是字符串?
  • 预期结果是一个字符串
  • @SamiKuhmonen 也尝试在 for 循环外使用 return 语句,但没有任何区别。
  • @SteveMedley 它是否在外部并不重要,您只是在该变量中分配一个随机值,它会多次覆盖最后一个值。该代码不可能有超过 1 个。

标签: javascript arrays function random return


【解决方案1】:

试试这个:

function randomProduct(num) {
    var iter = num;
    var rand ="";
    for (var i = 0; i < iter; i++) {
    rand += recommendedProducts[Math.floor(Math.random() * recommendedProducts.length)];
    }
    return rand

 }

正如@Steve Medley 所说,结果应该是字符串。所以如果推荐产品包含一些字符串,你应该在循环的每次迭代中添加这个字符串到你的结果中,并在你的循环完成后返回它(这也是我从问题中理解的)

【讨论】:

  • 请解释您更改了什么以及原因。
【解决方案2】:

return rand 会在第一个结果时让您退出该功能。

您可以删除循环,只需返回 rand,然后调用该函数 4 次。

如果您希望函数返回随机数数组,而不是 return rand,请将结果推送到新数组并在 for 循环完成后返回数组。

【讨论】:

    【解决方案3】:

    试试这个:

    function randomProduct(num) {
        var iter = num;
        var randomArray = [];
        for (var i = 0; i < iter; i++) {
         randomArray.push(recommendedProducts[Math.floor(Math.random() * recommendedProducts.length)]);
        }
        return randomArray.join(); // returns it as a string
    }
    

    首先,您需要使用 push 将项目附加到数组中

    其次,你需要在循环外返回,如果你从循环内部返回,你会在第一次迭代后中断函数。

    【讨论】:

    • 正如@Steve Medley所说,结果应该是字符串而不是数组。
    【解决方案4】:

    在您的循环中,变量rand 的值将等于其最后一次迭代输出的值,您需要返回对象数组而不是单个对象以获得所需的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2012-02-21
      相关资源
      最近更新 更多