2012-08-05 32 views
1

我有個像這樣的數組設置VAR:的Javascript:從陣列

var months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; 

我所試圖做的是使該月的名稱的變量和對象設置它像這樣:

for(i=0;i<11;i++){ 
months[i] = $(".bitem:eq("+i+")"); 
} 

但是,這只是取代months[i]if i=0例如,它會取代「揚」有物體)。我想要做的是使用months[i]等於變量名稱的字符串。我試着用.toString()這樣的:

for(i=0;i<11;i++){ 
months[i].toString() = $(".bitem:eq("+i+")"); 
} 

,但我得到的錯誤:

Error: ReferenceError: invalid assignment left-hand side 
+0

您是否試圖將'.bitem'元素的文本設置爲相應的月份? – Esailija 2012-08-05 20:43:21

+0

你想動態生成'var jan = ...'嗎? – pimvdb 2012-08-05 20:48:02

+0

我的猜測是你a)當你想要ID時濫用classnames和b)想爲你的代碼添加一個.text(),並且c)需要從equals的左側移除toString,比如'months [i] = $ (「.bitem:eq(」+ i +「)」)。text();' – mplungjan 2012-08-05 20:48:49

回答

4

到底爲什麼你需要有變量的名稱janfeb等?從我所知道的,你可以通過使用普通的舊對象具有屬性做你想要的一切:

var monthNames = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; 

var months = {}; 
for(var i = 0; i < monthNames.length; i++) { 
    months[monthNames[i]] = $(".bitem:eq("+i+")"); 
} 

// Example usage 
var januaryItem = months["jan"]; 
// or equivalent: months.jan; 
+0

這工作完美!謝謝。我嘗試了一些類似的東西,但我一直在這個工作很長時間,我想不起清楚。再次感謝。 – Tomjr260 2012-08-05 20:52:13

1

不用創建變量,使一個對象,可以將字符串轉換爲數組中的索引:

var monthIndex = { 
    "jan": 0, "feb": 1, "mar": 2, "apr": 3, "may": 4, "jun": 5, 
    "jul": 6, "aug": 7, "sep": 8, "oct": 9, "nov": 10, "dec": 11 
}; 
var months = $(".bitem"); 

現在給出任何月份的名稱,您可以從陣列中的相應元素:

var m = 'aug'; 
var element = months[monthIndex[m]]; 

您還可以使用特定的月份名稱,以獲得指數:

var element = months[monthIndex.aug]; 
+0

當然,jQuery集合是類似數組的,我怎麼會忘記!你可以用一個DOM查詢來做所有事情,甚至可以擺脫循環。做得好! :) – 2012-08-05 21:58:42