2010-07-20 4 views
2

jQuery와 JSON을 사용하여 데이터베이스에서 데이터를 가져옵니다. 데이터베이스의 각 행은 다른 제품이며 각 제품에는 연관된 많은 특성이 있습니다.동적으로 배열의 이름을 자바 스크립트로 지정할 수 있습니까?

js에서 수행하려는 작업은 모든 제품 속성을 포함하는 각 제품에 대해 명명 된 배열을 만드는 것입니다. JSON에서 데이터를 가져 오는 방법을 알고 있습니다. Array를 생성하는 방법을 알고 있습니다.

내가 모르는 부분은 배열 이름을 동적으로 만드는 방법입니다. 누군가 나를 도울 수 있습니까?

데이터베이스의 필드를 기반으로 배열의 이름을 지정하려고합니다. 기존 스크립트와 작업 스크립트의 구조에서는 data.cssid로 참조됩니다. 배열의 이름으로 data.cssid 값을 사용하고 배열을 채 웁니다.

$.getJSON("products.php",function(data){ 
    $.each(data.products, function(i,data){ 
     var data.cssid = new Array(); 
     data.cssid[0] = data.productid; 
     ... 
     etc 
    }); 
}); 

나는 위의 코드가 완전히 잘못되었다는 것을 알고 있지만 생각을 설명합니다. "var data.cssid"를 선언하면 data.cssid의 실제 값을 새 배열의 이름으로 사용하려고합니다.

편집 : 나는 (평가 제외) 여기에 언급 된 방법을 시도했습니다

. 아래 코드는 Object 생성자를 사용한다는 것을 제외하고는 원래의 게시물과 완전히 다르지 않습니다.

$(document).ready(function(){ 
$.getJSON("productscript.php",function(data){ 
    $.each(data.products, function(i,data){ 
     var arrayName = data.cssid; 
     obj[arrayName] = new Array(); 
     obj[arrayName][0] = data.productid; 
     obj[arrayName][1] = data.productname; 
     obj[arrayName][2] = data.cssid; 
     obj[arrayName][3] = data.benefits; 
     alert(obj[arrayName]); //WORKS 
     alert(obj.shoe); //WORKS WHEN arrayName = shoe, otherwise undefined 
    }); 
}); 
}); 

비정상적인 obj [arrayName]에 대한 경고가 작동하며 모든 멋진 모습의 배열을 보여줍니다. 하지만 alert (obj.shoe)라는 이름으로 특정 배열에 액세스하려고하면 arrayName = shoe 일 때만 작동합니다. 다음 반복에서는 실패하고이 함수 밖에서는 액세스 할 수 없습니다.

이 내용을 통해 문제를 명확히하고 해결하는 데 도움이되기를 바랍니다. 나는 정말로 모든 의견을 주셔서 감사하며 여러분이 제안하는 모든 것을 시도하고 있습니다.

PROGRESS (솔루션) : 귀하의 의견 모두에게

$(document).ready(function(){ 
$.getJSON("productscript.php",function(data){ 
    $.each(data.products, function(i,data){ 
     var arrayName = data.cssid; 
     window[arrayName] = new Array(); 
     var arr = window[data.cssid]; 
     arr[0] = data.productid; 
     arr[1] = data.productname; 
     arr[2] = data.cssid; 
     arr[3] = data.benefits; 
     alert(window[arrayName]); //WORKS 
     alert(arrayName); //WORKS 
     alert(shoe); //WORKS 

    }); 
}); 
}); 
function showAlert() { 
    alert(shoe); //WORKS when activated by button click 
} 

감사합니다.

+0

왜? 변수로 무엇을하고 싶습니까? – SLaks

+0

당신은'eval'을 사용할 수 있습니다,하지만 아마 좋은 생각이 아니기 때문에 나는 대답으로 두지 않을 것입니다. 예 : 'eval ('var'+ data.cssid + '= new Array()'); ' –

+0

다른 스크립트에서 각 제품의 속성을 사용하려고합니다. 원래 JSON에서 필요한 html이 출력되도록이 코드를 작성했습니다. 이제는 더 유연하게 만들 필요가 있다고 생각하고 배열을 먼저 생성 한 다음 배열에 액세스하여 html과 수식을 구성하는 것이 올바른 방법 일 것이라고 생각했습니다. 그래서 "신발"제품의 HTML을 만들 때 배열에 액세스하여 스크립트에 변수를 연결합니다. –

답변

7

배열은 여전히 ​​data 개체에 있습니까?

data[data.cssid] = new Array(); 

그렇지 않으면 다른 개체에 할당 할 수 있습니다. window 객체에 할당

window[data.cssid] = new Array(); 

는 전 세계적으로 사용할 수있게됩니다 ...data.cssid의 값이 다음 "abc" 경우 당신은 다음과 같은 이름으로

abc[0] = data.productid; 
+0

전역 개체에 할당하는 것이 좋습니다. +1 – Triptych

+0

배열에 전역으로 액세스 할 수 있기를 원합니다. 1. window [] 메서드를 사용하여 배열을 채우는 방법은 무엇입니까? 겠습니까 : window [data.cssid] [0] = data.products; 2. 배열을이 방법으로 만든 후에 배열에 어떻게 액세스합니까? data.cssid의 값이 "shoe"이면 shoe [i] 또는 다른 구문을 사용하여 배열에 액세스 할 수 있습니까? –

+0

'window [ "shoe"]'still을 써야합니다. 신발과 하드 코드 된 '신발'이라는 것을 알지 않는 한. x [str]은 (x.prop와는 반대로) 문자열을 사용하여 x의 속성에 액세스하는 방법입니다. – Jake

0

불가능하지 않습니다. PHP에는 "가변 변수"가 있습니다. Javascript는 그렇지 않습니다.

당신은 그러나 현존하는 객체 배열을 할당 할 수 있습니다 :

var obj = {}; 
var name = 'foo'; 
obj[name] = 1; 

alert(obj.foo) // alerts "1" 

어쨌든 그 기능이 필요 했어 왜 솔직히 확실하지 않다. 더 많은 코드를 게시 할 수 있습니까? 위의 내용이 도움이되지 않는다면 아마 괜찮은 해결 방법이 될 것입니다.

+0

나는 지금이 방법과 다른 방법을 시도하고있다. 내가 곧 게시하고 더 많은 코드를 포함 시키면 작동하지 않을 것입니다. –

0

당신은 객체에 속성을 설정할 수 있도록처럼 액세스 할 수 있습니다

var obj = {}; //Or, new Object() 
obj[data.cssid] = new Array(); 

을하지만, 당신은 단지 만들기하는 경우 지역 변수, 아무런 의미가 없다; 한 번에 하나의 배열 만 다루기 때문에 단순히 배열 newData (또는 이와 비슷한 이름)을 지정할 수 있습니다.

관련 문제