2011-08-12 74 views
1
陣列

我試圖用以下結構反覆創建一個對象:逐步添加到對象在Javascript

var series = { 
     data: [{ 
      name: 'some text', 
      y: 0 
     }, 
     { 
      name: 'some other text', 
      y: 1 
     }] 
    } 

下面是我到目前爲止的代碼:

var series = { 
    data: []  
}; 

var datatemp = { 
    y: '', 
    name: '' 
}; 

for (var i=0; i<10; i++) { 
    datatemp.y = i; 
    datatemp.name = "namelabel"+i; 
    series.data.push(datatemp); 
} 

但我是什麼獲取是數組中所有元素中的series.data [i] .y和series.data [i] .name的最終值,而不是我期望的值,這與計數器迭代的值不同。我很感謝你對我做錯的指導。提前致謝!

回答

4

要添加到什麼密米爾之泉說,你甚至可以這樣來做:

for (var i=0; i<10; i++) { 
    series.data.push({y: i, name: "namelabel"+i}); 
} 

沒有必要的中間變量。

+0

+1。這是我開始輸入的答案(儘管我的一些額外的換行符)。 – nnnnnn

+0

謝謝,我懷疑這件事很簡單。我對JS很陌生,因爲每個人都可以說:) – leuemon

1

您需要爲for循環的每次迭代創建一個新的datatemp,否則每次只將相同的對象傳入數組並修改它的值。

for (var i=0; i<10; i++) { 
    var datatemp = {}; 
    datatemp.y = i; 
    datatemp.name = "namelabel"+i; 
    series.data.push(datatemp); 
} 
+0

感謝您的幫助! – leuemon

0
var series = { 
    data: []  
}; 



for (var i=0; i<10; i++) { 
    var datatemp={}; 
    datatemp.y = i; 
    datatemp.name = "namelabel"+i; 
    series.data.push(datatemp); 
} 

for (var i=0; i<10; i++) { 
    console.log(series.data[i].y); 
     console.log(series.data[i].name); 
} 

http://jsfiddle.net/Vp8EV/

0

目的是通過javascript參考過去了,在你的例子中,你只需要它是由名datatemp引用一個對象,每次新的值分配給其成員的舊之一成員會被覆蓋,因此您必須爲循環的每次迭代創建一個新對象。