2010-11-13 33 views
2

我從某個地方瞭解到,如果我有一個無序的集合(例如購買東西的列表),我應該在Javascript中使用對象字面值。如果我有一個有序列表(例如按優先順序購買的東西列表),我應該使用一個數組。Javascript中有序集合的無序集合和數組的對象?

陣:

priorityList = [ 
    "computer" 
    "mouse" 
    "pen" 
] 

我的問題是怎麼會是這樣一個對象文本做了什麼? 這是正確的,我應該使用對象的無序列表,或者我應該使用它的數組呢?

UPDATE答案之一:

選擇1:

var things = [ 
    {"name":"computer","price":300}, 
    {"name":"mouse","price":20}, 
]; 

選擇2:

var things = { 
    "computer": { 
      "price": 300 
    }, 
    "mouse": { 
      "price": 20 
    } 
} 

哪一個我應該選擇?

更新2到答案之一:

var ulist = { 
    "bar": { 
     "price": 12 
    }, 
    "baz": { 
     "price": 12 
    }, 
    "bar": { 
     "price": 12 
    } 
} 

for(item in ulist) { 
    console.log(item); // bar baz 
} 

var olist = [ 
    {"name": "bar"}, 
    {"name": "baz"}, 
    {"name": "bar"} 
] 

console.log(olist[0].name); // bar 
console.log(olist[1].name); // baz 
console.log(olist[2].name); // bar 

這裏,我們看到無序列表,其中的所有項目應該是唯一的好同選擇2的原因,即使我錯誤地設置了多個獨特的項目它只是變得之一他們,並不關心訂單。

但是在選擇1中,即使我具有相同的項目,它們也會被視爲單獨的項目,並且全部都會打印出來。而且它似乎也是有序的,因爲如果沒有用[0],[1],[2]等迭代它就沒有辦法獲得物品。

這是否證明選擇2更適合當你想要有獨特的項目?

回答

5

它更多的是關於數據結構的複雜性。如果你有一個如字符串的原始事物列表,使用一個數組(不管它是否被排序)。如果您有更復雜的需要鍵/值對的數據結構,請使用對象字面值。

如果要存儲元數據,例如:

var things = [ 
    {"name":"computer","price":300}, 
    {"name":"mouse","price":20}, 
]; 

數組是不夠的,因爲我有很多的存儲在每個對象的信息......但我把它們作爲一個數組的孩子。因此,如果您要存儲更多信息而不僅僅是項目本身,請使用對象文字。

如果你有一個關聯數組狀結構,使用對象文本,以及:

var person = { 
    age: 23, 
    walk: function(){}, 
    name: "john" 
}; 
+0

所以我不應該依賴我的數組和對象之間的選擇,它是否是一個無序或有序列表? – ajsie 2010-11-13 22:36:46

+0

在我看來,是的。 – 2010-11-13 22:37:10

+0

由於您編輯了,如果您要爲每個項目存儲元數據,我會選擇1。 – 2010-11-13 22:41:35