2011-01-10 9 views
3

페이지에 Div의 무리가 추가 된 프로그램이 있습니다. 나중에 전역 변수에 포함시키려는 div에 'data-'속성이 추가되었습니다. 나는 기본적으로 같은 것을 설정하려는JQuery에서 전역 변수에 키/값 쌍을 추가하는 방법은 무엇입니까?

:

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels.label = $(this).attr("data-label"); 
    $.scoreArray.labels.x = $(this).attr("data-x"); 
} 
... 

는하지만 [ "라벨"] 내가 .label 퍼팅 시도로 .X 한 오류 TypeError: Cannot set property 'label' of undefined

을 얻고 유지 [ "x"] 그러나 아무 소용이 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

각 단어마다 하나의 항목으로 scoreArray.labels 객체 배열을 만드시겠습니까? 아니면 단일 레이블 객체에서 찾은 마지막 단어 만 저장하고 싶습니까? 라벨'{}'을'[]'이 아닌 라벨로 만들면 제대로 작동하지만 달성하려고하는 것이 아닐 수도 있습니다. – Rup

답변

1

편집 : 당신이하고 싶은 것을 보았습니다. 배열에 수집 할 속성이 들어있는 각 단어마다 하나씩 많은 객체가 포함되기를 원합니다.

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    newLabel = {}; 
    newLabel.label = $(this).attr("data-label"); 
    newLabel.x = $(this).attr("data-x"); 
    $.scoreArray.labels.push(newLabel); 
} 

그러나, 사용자가 만든 "글로벌"변수와 같은 소리를보고있는 오류가 당신이있어 범위에서 발견되지 않는이 실제 코드 : 그래서 당신은 같은 것을 원한다.?

+0

나는 OP *가 배열을 원하지만 그것들에 객체를 넣길 원한다고 생각한다. – sberry

+0

오류 OP의 원본이 아닐 것입니다. Javascript는 배열에 명명 된 속성을 추가 할 때 불평하지 않습니다. – user113716

+0

네, 둘 다 맞습니다. 귀하의 의견을 반영하도록 편집 됨. –

0

액세스하려고하면 $.scoreArray.labelsundefined 인 것처럼 보입니다.

앞에을 입력했는지 확인하십시오.

부수적으로, 명명 된 속성을 사용하려는 경우 배열 대신 개체를 사용해야하는 경우가 있습니다.

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels[ i ] = {label: $(this).attr("data-label"), 
            x: $(this).attr("data-lx") 
           }; 
} 

또는 어쩌면 더 나은 솔루션은 .map()을 사용하는 것입니다 :

$.scoreArray = { 
    scores: [], 
    labels: [] 
}; 
$(".word").each(function (i) { 
    $.scoreArray.labels[ i ] = {}; 
    $.scoreArray.labels[ i ].label = $(this).attr("data-label"); 
    $.scoreArray.labels[ i ].x = $(this).attr("data-x"); 
} 

나이 : 당신이 객체의 배열을 원하는 경우

, 이렇게. 이 (및 다른 솔루션)에서는 기존 배열에 추가하지 않는다고 가정합니다. 당신이 객체의 배열보다는 점수가 레이블로 묶여 보관해야합니다 것처럼 보이는 두 개의 배열을 가진 객체에 좋을 것 같은

$.scoreArray.labels = $(".word").map(function (i) { 
    return {label: $(this).attr("data-label"), 
       x: $(this).attr("data-lx") 
      }; 
}).get(); 
0

그것은 나에게 보인다.

// are you sure you want to add this as a property on the jQuery object? 
var $.scoreArray = $.map($('.word') , function(elem) { 
         var self = $(elem); 
         return { score : self.attr("data-x"), 
           label : self.attr("data-label") }; 
        }); 

// $.scoreArray will be an array of objects, each with a score and label property 
관련 문제