2014-09-26 41 views
2

所以我有strings: ["a", "b", "c", "d"]陣列,但我想array[4]它每次使用時,因此是隨機字符串:javascript數組中的隨機項?

array[0] returns "a", 
array[1] returns "b", 

array[4] returns something random, like "x", 
array[4] returns something random the second time as well, like "y", 

有隨機的()的函數,但是如果我設置array[4]等於隨機()它會保持該隨機值,但每次調用時都需要保持隨機值。

+3

'數組[4]' - 只需要調用'隨機()'? – tymeJV 2014-09-26 14:02:47

+1

這似乎是更適合JavaScript對象/類使用getter和setters的東西 – 2014-09-26 14:03:14

+0

不,我想調用array [4]不是隨機的,我知道它有點模糊 – user3641520 2014-09-26 14:04:21

回答

6

使用Object.defineProperty

var a = ["a", "b", "c", "d"]; 
Object.defineProperty(a, 4, { get: Math.random }); 

console.log(a[4]); // some random number 
console.log(a[4]); // another random number 
+1

不錯!不知道! – FrancescoMM 2014-09-26 14:16:40

+1

@FrancescoMM關於Object.defineProperty的好處是,它不需要任何特殊的語法,它在對象實例化之後起作用。如果您不介意特殊用途的語法,並可以在實例化過程中設置訪問器,那麼您的解決方案也可以工作(對您+1)。 – 2014-09-26 14:23:31

+0

..但我甚至不是一個陣列.. :( – FrancescoMM 2014-09-26 14:25:49

-1
function random() { 
     character = String.fromCharCode(Math.floor(Math.random() * 26) + "a".charCodeAt(0)); 
     return character; 
    } 
-1

這裏是你如何能而不是調用的實現類似的功能

arrayManager = { 
    array: ["a", "b", "c", "d"] 
    set: function(i, v) { 
     this.array[i] = v; 
    } 
    get: function(i) { 
     if (i == 4) return random(); 
     else return this.array[i]; 
    } 
}; 

var random = arrayManager.get(4); 
1
var array = { get 4() {return getRandomInt(1,10);} } 

alert(array[4]); 
alert(array[4]); 
alert(array[4]); 



function getRandomInt(min, max) { 
    return Math.floor(Math.random() * (max - min)) + min; 
}