2013-04-08 100 views
0

對我來說這似乎很複雜。 首先,我有這樣的名單:在JavaScript中動態設置對象

liste_path_categories.push(
    { index: null 
     , letter: "letter1" 
     , type: key 
     , picture_url: "url1" 
     , id_categ: null 
     , response: "Answer here" 
    }); 

我想是從這個大名單中提取這種形式的對象:

 data["String1"]["String2"]= String3 

有了:

String1=list_path_categories[i].letter 
    String2=list_path_categories[i].id_categ 
    String3=list_path_categories[i].response 

例如:

 data['A']['12'] : "A_answer" 

要聲明我這樣做的數據:

 var data = new Object(new Object); 

如何設置數據中的所有值?

+5

你能更好地解釋你的問題。我不太明白。 – svlada 2013-04-08 11:40:57

+0

用另一個聲明'new Object'只是創建一個對象。我會建議先添加屬性,然後添加一個新的對象。你也應該使用簡寫方法:{} – marksyzm 2013-04-08 11:46:56

回答

0

可以使用Array.forEach方法來遍歷liste_path_categories和構建你的數據對象。

例子:

var liste_path_categories = []; 
var data = {}; 

liste_path_categories.push(...); 
... 
liste_path_categories.push(...); 


liste_path_categories.forEach(function(element) { 
    data[element.letter] = {}; 
    data[element.letter][element.id_categ] = element.response; 
}); 

的jsfiddle例如:http://jsfiddle.net/3ZvNf/

+0

認爲它工作得很好 – Brahim 2013-04-08 12:57:03

0

你的問題很含糊,但你的意思是這樣嗎? 在屬於另一個對象的對象中設置動態屬性?

data['A']['12'].answer = "A_answer" 
0

而不是使用字符串,您必須使用變量的訪問屬性:

var data = {}; 

if (!data[String1]) { 
    data[String1] = {}; // make sure that data[String1] exists and is an object 
} 

data[String1][String2] = String3; 

如果你想爲數組中的元素做到這一點,你必須iterate over the array


P.S:我建議比StringX使用更富表現力的變量名。

0

首先創建構造函數(在OOP術語):

var ctor_object = function(letter,id_categ,response) 
{ 
    this.letter = letter; 
    this.id_cated = id_categ; 
    this.response = response; 
} 

(在genereal你應該班級的對象的名稱後直接省略ctor_語法和命名)

然後使用在您的類別列表構造函數:

var length = liste_path_categories.length, 
    element = null; 
for (var i = 0; i < length; i++) 
{ 
    element = liste_path_categories[i]; 
    my_obj = new ctor_object(element.letter,element.id_categ,element.reponse) 
    // Do something with my_obj 
}