2011-10-21 76 views
2

這裏是我的工作功能。如何動態創建dataObject? (讓我們假設我知道有多少列) 我試着用eval函數動態創建變量的值+ i,但沒有成功。Javascript動態哈希創建

function parseCSV(rows){ 
     dataProvider = []; 
     for (var i = 0; i < rows.length; i++){ 
      if (rows[i]) {     
       var column = rows[i].split(","); 
       var date = someFunction(column[0]); 
       var value1 = column[1]; 
       var value2 = column[2]; 
       var dataObject = {date:date, value1:value1, value2:value2}; 
       dataProvider.push(dataObject); 
      } 
     } 
    } 

感謝ü

+0

我不明白你想要它做什麼,它還沒有做。你最終得到一組對象,每一個對應一行;這怎麼不夠好?你想要一個對象而不是對象嗎?你能告訴我們你嘗試過的代碼沒有用嗎? –

+0

你的意思是dataProvider是一個全局變量,而不是在本地聲明它,然後從'parseCSV()'函數返回它? – jfriend00

回答

0

如果你不知道你有多少列有,但要創建一個對象全值X's:

var date = someFunction(column[0]); 
var dataObject = {date: date}; 

for (var i=1; i < column.length; i++){ 
    dataObject['value' + i] = column[i]; 
} 

而不是使用value1,...如果可能,您應該嘗試使用更多描述性名稱。

2

有幾種方法。

第一:

var hash = new object(); 
hash["date"] = date; 
hash["value1"] = value1; 
hash["value2"] = value2; 

二:

var hash = {}; 
hash["date"] = date; 
hash["value1"] = value1; 
hash["value2"] = value2; 

三:

var hash = {"date" : date, "value1" : value1, "value2" : value2}; 
+1

不要忘記'hash.myNewValue = 42;' – Bart

+0

hash應該在之前創建。在聲明em之前使用變量是一種不好的做法。 – mephisto123