2014-09-26 2 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

을 수행 할 수있는 방법은? – tymeJV

+1

이것은 getters와 setter를 사용하는 자바 스크립트 객체/클래스에 더 잘 맞는 것처럼 보입니다. –

+0

아니요 배열 [4]을 무작위로 호출하고 싶지 않습니다. 약간 막연한 것 같습니다. – user3641520

답변

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

+1

@FrancescoMM'Object.defineProperty'에 대한 좋은 점은 특별한 구문을 필요로하지 않으며 객체가 인스턴스화 된 후에 작동한다는 것입니다. 특수 구문을 염두에 두지 않고 인스턴스 생성 중에 접근 자 설정을 제거 할 수 있으면 솔루션도 작동합니다 (+1). –

+0

..하지만 광산은 배열이 아닙니다. :( – FrancescoMM

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

는`배열 [4]`당신이 대신 호출하는 유사한 기능

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; 
}