2011-10-20 3 views
2

이것은 매우 간단한 질문이지만, 내가 잘못하고있는 것을 이해할 수는 없습니다. 이 객체가 있다고 가정 해 보겠습니다.JavaScript 객체를 순회 - 내가 무엇이 부족합니까?

features: { 
    savings: { 
     link: "test.html", 
     img: "/_assets/img/related-content/sample.png" 
    }, 
    security: { 
     link: "test2.html", 
     img: "/_assets/img/related-content/sample2.png" 
    }, 
    speed: { 
     link: "test3.html", 
     img: "/_assets/img/related-content/sample3.png" 
    } 
} 

이 형식이 설정되어 있고 변경할 수 없다고 가정합니다. 나는 features["savings"].link과 같은 것을함으로써 쉽게 선택할 수 있습니다. 하지만이 객체에서 무작위로 항목을 가져 오려고한다고 가정 해 봅시다. 난 임의의 숫자를 생성하고 그것을 사용하여 색인을 선택합니다. 그러나 features[randnum].link이 작동하지 않습니다. 왜 이런거야? 어떻게하면 개체 형식을 수정하지 않고도이 작업을 수행 할 수 있습니까?

감사합니다.

+0

는 죄송, 제목을 바꾸었다. –

+1

[Javascript 객체의 랜덤 속성 선택] (http://stackoverflow.com/questions/2532218/pick-random-property-from-a-javascript-object) –

+0

감사합니다.이 링크는 내 질문에 대한 답변입니다. –

답변

3

왜냐하면 여러분이 배열이 아닌 객체를 다루기 때문입니다. 따라서 숫자만으로 객체에 색인을 생성 할 수 없기 때문입니다. 그냥 해명

var randnum = getRandomNumber(1, 3); // get random num between 1 and 3 
var randomLink = features["feature" + randnum].link; 

,이 표기법 : 당신은 같은 것을 수행해야

features["feature1"].link; 

하면 속성 이름이없는 경우

features.feature1.link; 

과 동일 당신 "보안"또는 "절약"과 같이 쉽게 생성 할 수 있습니다. 속성을 정적 인 것으로 가정하면 배열을 사용하여 도움을 줄 수 있습니다. 당신은 당신이 등록 될 예정하는지 모르는 경우

var properties = [ "security", "savings" ]; 
var randomProperty = properties[Math.floor(Math.random() * properties.length)]; 
var randomLink = features[randomProperty].link; 

, 당신이 그들을 수집 할 수 있습니다 개체 numericaly 인덱싱되지 않습니다

var properties = []; 
for (var prop in features) { 
    if (features.hasOwnProperty(prop)) { 
     properties.push(prop); 
    } 
} 
var randomProperty = properties[Math.floor(Math.random() * properties.length)]; 
var randomLink = features[randomProperty].link; 
+0

feature1, feature2 등 대신에 카테고리 이름 (예 : 보안, 저축 등)이 있다고 가정 해 봅시다. 그러면 어떻게 할 수 있습니까? –

+1

@ellenchristine : 배열의 모든 키를 가져올 수 있으며 [요소를 무작위로 선택] (http://stackoverflow.com/questions/4550505/javascript-getting-random-value-from-an-array). –

+0

@ellenchristine : 답변을 업데이트했습니다. –

0

JS를, 당신은 그것을 액세스 할 수 없습니다 정수를 사용하는 배열로.

+0

. 그래서 나는 그것을 연관 배열로만 처리 할 수 ​​있습니까? –

+0

연관 배열이 아니기 때문에 객체입니다. myArray [ 'myPropertyName'] 구문은 객체의 속성에 액세스하는 다른 방법 일뿐입니다. –

+0

숫자로 색인화되지 않았다고 말할 수는 없습니다. 나는 연관성이 없다면 모든 배열이 하나의 의미 또는 다른 것으로 생각합니다. 어쨌든 .. 예를 들어 W3을 살펴보면 색인 배열을 보여줍니다. 그리고 제가 myobj [0] .myproperty와 같은 것을 한 곳에서 객체/배열로 작업 한 것을 압니다. W3 ref : http://www.w3schools.com/js/js_obj_array.asp – chris

0

[원본] json 구조에 대한 [무언가] 기능을 찾을 수 있습니다. 뭔가. 그러나 실제로 json 객체의 배열을 배열로 만들 수 있습니다. 이것은 당신이 원하는 랜덤 액세스를 제공 할 것입니다. 그러나 배열을 만드는 것에 대해 생각하지 않는 한 feature3을 찾기위한 '검색'기능이 제공 될 것입니다. 기능

는 [randomInteger] .link 아래 구조 변경 :

var features = [{ 
     name:"feature1", 
     link: "test.html", 
     img: "/_assets/img/related-content/sample.png" 
    }, 
    { 
     name:"feature2", 
     link: "test2.html", 
     img: "/_assets/img/related-content/sample2.png" 
    }, 
    { 
     name:"feature3", 
     link: "test3.html", 
     img: "/_assets/img/related-content/sample3.png" 
    }]