2014-09-26 49 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; 
}