2013-03-30 119 views
2

對不起,問一個小白的問題,但如果我有一個數組:Javascript數組索引

MyArray["2cd"]="blah1"; 
MyArray["3cx"]="blah3"; 
MyArray["8cz"]="blah2"; 

和一個字符串myStr="2cd"; 然後我用MYARRAY [myStr中]獲得嗒嗒的價值,我怎樣才能得到我在對象/數組中訪問的數字,還是0在這種情況下?

+0

索引是一個數字。如果cd是一個數字,或者你需要parseInt(「2cd」,10),那麼你可以訪問MyArray [0]或者MyArray [cd],那麼返回2就可以做MyArray [2]。 – frenchie

+0

「索引」是一個數字串(例如「0」,「1」,「2」)。對於OP,javascript數組只是具有特殊長度屬性的普通對象以及從Array.prototype繼承的方法。所以你可以像對象一樣使用數組(不喜歡,但工作得很好)。許多數組方法是通用的,可以在具有合適屬性的普通對象上使用。 – RobG

+0

我已經從你給出的例子中創建了一個jsfiddle演示:http://jsfiddle.net/zxZTX/ –

回答

3

如果我可以在字裏行間,它聽起來就像你認爲你發佈的代碼:

MyArray["2cd"] = "blah1"; 
MyArray["3cx"] = "blah3"; 
MyArray["8cz"] = "blah2"; 

將自動成爲相當於:

MyArray[0] = MyArray["2cd"] = "blah1"; 
MyArray[1] = MyArray["3cx"] = "blah3"; 
MyArray[2] = MyArray["8cz"] = "blah2"; 

,因此,你可以得到字符串"blah1"以下兩種方法之一:

var foo = MyArray[0]; // sets foo to "blah1" 
var bar = MyArray["2cd"] // also sets bar to "blah1" 

但這不是JavaScript的作品。

你當然可以一套事情,所以你可以使用我的MyArray[0]MyArray["2cd"]獲取相同的值,但你必須明確地做它在我的例子。

你沒有提到的一件事是你如何宣佈本身。是Array還是Object?也就是說,您發佈的代碼之前,你創建有:

var MyArray = {}; // or equivalently, var Array = new Object; 

或:

var MyArray = []; // or equivalently, var Array = new Array; 

第一個示例創建一個Object,第二的Array

有點令人困惑的是JavaScript有這兩種類型,在很多情況下,你可以互換使用。但是,當你在對象中使用任意(通常但不一定是非數字)的鍵時,通常使用Object,如你的例子。相反,當您主要使用嚴格的數字索引時,習慣上使用Array

實際上,JavaScript的Array類型Object類型繼承。一個Array僅僅是一個Object具有一些附加的行爲:

  • 一個Array具有額外的方法,如其中.push()追加項目到陣列。

  • Array.length屬性,當你用.push()或直接array[123]分配,或添加元素,其會自動更新,當你刪除與.pop()或其他方法的元素。

正如Fabrício指出的那樣,JavaScript沒有的東西就像一個「關聯數組」,其行爲與其他語言中的相似。它有對象,它有陣列(從對象繼承),你必須按照他們自己的條件處理每一個。

+2

你可以先清楚地說明JS中沒有關聯數組。 –

+0

絕對!謝謝你提到這一點。當我在商場等待女兒的時候,我從我的手機上發佈了我的原始回覆,所以它有點簡潔。現在我有一個方便的鍵盤,我詳細闡述了數組與對象之間的關係。 –