2015-04-20 57 views
1

我試圖構建的JavaScript數組,但我不知道正確的方式去做,或者如果這種類型的數組,甚至有可能...需要協助建立複雜的JS對象

比方說,我對數組中的每個項目都有一個鍵,以'a'開始並以'z'結尾。對於每個項目,數組鍵將與另一個多維數組相對應。這些新的多維數組是一系列座標(x和y)。原始數組中的每個項目可以有多組座標。例如:

enter image description here

我如何構建使用JavaScript這樣的陣列?什麼是正確的語法?

回答

2

對於數據您提供:

var arr = { 
    a: [[20,15],[25,17],[10,45]], 
    b: [[10,33],[12,2],[14,9],[72,103],[88,12]], 
    c: [[2,2],[41,21]], 
    d: [[0,0],[21,2],[44,44],[19,99],[1,1],[100,100]], 
    e: [[1,1], 
    f: [[3,40],[41,86]] 
} 

你想第一個結構,鍵陣列,是不是在JavaScript中的數組 - 它是一個對象。對象包含鍵值對。在這種情況下,這些值是數組,而這些數組中的對象本身就是數組。

如果您是從另一種定義'常規'多維數組的語言來的話,這裏需要注意的一個重要的事情是沒有期望或者保證這個結構的'行'都是相同的長度。

+0

這是一個目標......不是一個數組 – rafaelcastrocouto

+0

正確的。 OP要求一個'數組'鍵'a','b','c'...等。在某些語言中,這將是一個數組。在Javascript中,它不是。我認爲,實施OP所要求的行爲比遵守他們使用的措辭更重要,因爲當他們看起來對語言來說是相當新的時候。 –

+0

S McCrohan是正確的,這是我正在尋找的行爲,我很高興你能明白我的意思。 –

3

只需向您的列表添加另一個可能的選項,與@ SMcCrohan的答案相同,混合對象和數組。

var coords = { 
    a: [{ 
      x: 20, 
      y: 15 
     }, 
     { 
      x: 25, 
      y: 17 
     }], 
    b: [{ 
      x: 10, 
      y: 30 
     }], 

    .... 
}; 

這是假設你總是會使用座標xy,這意味着你可以訪問像這樣的價值觀:

var value1 = coords.a[1].x; // 25 
var value2 = coords.b[0].y; // 30 
+0

這樣做,而不是使用元組數組作爲最內層結構,將導致更具可讀性的代碼。 'coords.a [2] .x'比'coords.a [2] [0]'更直接可讀。 (希望我能想到它!) –

+1

但是當然,一個寫得很好的'getCoord'函數可能更具可讀性:'getCoord('a',2,'x')'。 –

+0

同意,斯科特。儘管這兩者都是好的。這樣,如果你把一個內部結構拉出來('var coord = coords.a [0]'),你就留下了一個對象,它仍然帶有一些意圖。 –