2015-02-05 54 views
1

我想讓我的程序生成一個4位數的引腳用於遊戲。幫助每個循環的Javascript

我本來想這樣做:

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; 

如何使用「每個」在JavaScript中循環,不jQuery的?

+0

[0,0,0 ,0] .forEach(function(item,index){}); – Lewis 2015-02-05 15:42:58

+0

nums.forEach(function(number){...}); – Mike 2015-02-05 15:43:07

+2

http://stackoverflow.com/questions/9329446/for-each-over-an-array-in-javascript – user1983983 2015-02-05 15:43:33

回答

1

您需要使用語言功能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); 
}) 
+0

我還應該補充說這個方法調用是特定於數組的。對象和字符串迭代有單獨的功能。 – 2015-02-05 15:45:43

+0

我用這個,但它只是返回一個undefined,如果我使用類似於: 'document.getElementById(「nums」)。innerHTML = nums [0];' 有什麼建議嗎? – 2015-02-05 16:00:39

0
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) 
1

我認爲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(''); 
} 
0

無需創建手動陣列:

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)