我听到很多关于如何将数组用于用户列表之类的内容,因为它很快,并且有长度等功能可以用来等。
然而,在我的许多用例中,我觉得物体的物体是要走的路,我喜欢你的意见。例如,我的实时应用程序中有一个用户列表 - 无论何时新用户连接或断开连接,都必须更新列表。在这种情况下你会使用这样的数组或obj吗?如果使用数组,原因是什么?
var obj = {
"1": {id:1, fullName: 'My Name', sex: 'male'},
"50": {id:50, fullName: 'My Name', sex: 'none'},
"5": {id:5, fullName: 'My Name', sex: 'female'},
};
当用户加入时我只需将他的obj添加到obj,当用户光盘时,我只使用delete obj [50];
如果我使用了数组,我会有一个removeUser(id)函数,它会扫描数组并在找到它时删除用户。
答案 0 :(得分:0)
最后,您应该使用对象。虽然不能保证它们不受哈希表的支持,但至少它们应该始终优化,以便比搜索数组中的对象(即Array.prototype.filter
)更快地访问属性。
也许你想看看这个Q& A:Under the hood, are Javascript objects hash tables?
答案 1 :(得分:0)
来自对象的直接实例的字典样式
在你的简单案例中,我会使用字典作为你拥有的字典。如果需要,可以使用 for in循环枚举属性。如:
var dict = { james: 34, ben: 34, chris: 73};
var people = [];
for (var name in dict){
people.push(name + ": " + dict[name]);
}
people; //["alice:34", "bob: 24", "chris: 62"]
首选数组到有序集合的字典。
如果你需要一个有序的集合,我更喜欢一个数组。直觉上,Javascript对象是无序的属性集合。获取和设置不同的属性应该以任何顺序工作。 ECMAScript标准未指定属性存储的顺序。
使用时的捕捉......中
for..in循环必须选择一些函数来枚举对象的属性,因为标准允许Javascript引擎自由选择一个顺序,代码的行为可以改变。除非您在不同的Javascript环境中测试代码,否则您的行为可能并不总是显而易见。
要记住的事情
只是帮助你做出决定的一些事情。