2011-06-11 8 views
0

Noob 질문입니다. 배열 요소를 설정하면 오류가 발생합니다.자바 스크립트에서 배열 설정

스크립트를 실행할 때이 오류가 발생합니다. array1 [user_id]는 정의되지 않았습니다. 내가 제대로이 질문을 이해한다면

array1 = new Array(); 

// the data variable I got from a JSON source 
// using jQuery 
$.each(data, function(i, item) { 

    // Set variables 
    user_id = item.post.user_id; 
    user = item.post.user; 
    price = item.post.price; 

    if (array1[user_id]['user'] != user) { 
     array1[user_id]['price'] = price; 
     array1[user_id]['user'] = user; 
    } 

} 
+0

음 .. 내가 Cudos 명확하게 중첩 된 개체를 정의하려고하는 각각의 하위 객체를 인식하지 않습니다, 그것은 그 나쁘지 않아 – Cudos

+0

... 지금의 더 이해하려고 시도하고 독립적으로 초기화해야 . –

+0

@pst 최선을 다하고 있습니다. 나는 당신에 대해 모른다. 그러나 영어는 나의 첫번째 언어가 아니다. 그리고 javascript는 나에게 꽤 새로울 것이다. 무례 할 이유가 없습니다. – Cudos

답변

2

먼저 해시 맵이 필요한 경우 배열을 사용하지 말고 객체를 사용하십시오. 일부 언어에서는 하나의 기능이지만 JS에서는 그렇지 않습니다.

중첩 된 개체를 정의 할 때 각 수준을 개체로 정의해야합니다.

var hash = {}; 

// the data variable I got from a JSON source 
$.each(data, function(i, item) { 

    // Set variables 
    user_id = item.post.user_id; 
    user = item.post.user; 
    price = item.post.price; 
    // Have to define the nested object 
    if (!hash[user_id]) { 
     hash[user_id] = {}; 
    } 
    if (hash[user_id]['user'] != user) { 
     hash[user_id]['price'] = price; 
     hash[user_id]['user'] = user; 
    }  
} 
+0

누가 jQuery에 대해 언급 했습니까? – Ivan

+0

@Ivan - 아무도 없지만 종종 인생의 시간이 짧아집니다 (ier). –

+4

@Ivan : 포스터가 작동 했으므로 원래 게시를 수정하여 jQuery를 추가하지 않았습니다. 게시하고 downvote 전에 읽기! –

0

, 당신과 같이 먼저하는 array1의 첫 번째 차원을 초기화 할 수 있습니다

array1[user_id] = {}; 

다음이 작업을 수행 할 수 있습니다

array1[user_id]['user'] = 'whatever'; 

즉 물론 user_id가 정의되지 않았다고 가정합니다.

+0

문제는 "data"변수를 반복하기 전에 "user_id"변수가 무엇인지 알 수 없다는 것입니다. – Cudos

+0

그러면 객체를 사용하고'catch '를 시도 할 것입니다. –

관련 문제