2010-11-13 118 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