【问题标题】:Assistance with Javascript for each loop每个循环的 Javascript 协助
【发布时间】:2015-04-05 13:13:46
【问题描述】:

我正在尝试让我的程序生成用于游戏的 4 号密码。

我原本想这样做:

function paswdGen() {
    var nums = [0, 0, 0, 0];
    for each (var x in nums) {
        x = Math.floor((Math.random() * 9) + 1);
    }
} 
document.getElementById("nums").innerHTML = nums;

如何在没有 jQuery 的情况下在 javascript 中使用“for each”循环?

【问题讨论】:

  • [0, 0, 0, 0].forEach(function(item,index){});
  • nums.forEach(function(number){ ... });
  • 只是指出您的数字生成器可以创建 nr 10 而不会创建 0。
  • 它不可能生成 10。Math.random() 的返回值严格小于 1。这将导致一个介于 1 和 9 之间的值。

标签: javascript for-loop foreach each


【解决方案1】:

无需手动创建数组:

var length = 4;
var range = 10;

Array.apply(null, {length: length}).map(function() {
  return Math.floor((Math.random() * range) + 1);
});

另一种方式:

var length = 4;
var range = 10;
var transform = function(random) { return Math.floor(random * range) + 1 };
Array.apply(null, {length: length}).map(Math.random).map(transform)

【讨论】:

    【解决方案2】:

    我认为Array.prototype.forEach 可能不是您需要的,我可以建议使用Array.prototype.map instead 吗? (请注意,这适用于大多数浏览器和 IE9+)

    // this function would return a string of 4 digits
    function paswdGen() {
        var nums = [0, 0, 0, 0];
    
        return nums.map(function () {
            return Math.floor((Math.random() * 9) + 1);
        }).join('');
    } 
    

    【讨论】:

      【解决方案3】:
      var code = '';
      
      for (var i = 0; i < 4; i++) {
      
          code += Math.floor((Math.random() * 9) + 1);
      }
      
      console.log(code); // Outputs 1234 (for example)
      

      如果您的目标是使用 forEach:

      var nums = [0, 0, 0, 0];
      var code = '';
      
      nums.forEach(function(){
          code += Math.floor((Math.random() * 9) + 1);
      })
      
      console.log(code); // Outputs 1234 (for example)
      

      【讨论】:

        【解决方案4】:

        您需要使用语言功能 Array.prototype.forEach。在此处查看来自 MDN 的一些出色文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

        这是您的代码的一个版本:

        var nums = [0, 0, 0, 0];
        nums.forEach(function(nums){
            x = Math.floor((Math.random() * 9) + 1);
        })
        

        【讨论】:

        • 我还应该补充一点,这个方法调用是特定于数组的。对象和字符串迭代有不同的功能。
        • 我使用了这个,但如果我使用类似的东西,它只会返回一个未定义:document.getElementById("nums").innerHTML = nums[0]; 有什么建议吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多