如果以前曾经问到这个问题我很抱歉,这很难找到......
我想使用javascript数组来保存对象,使用密钥作为ID
例如,假设我有一群拥有不同身份证的人 var people = new Array();
var person = {property: value}; // this is person ID 4
var people[4] = person;
我希望能够通过说人[ID] .propery
来引用该用户问题是这个数组的输出现在是;
null,null,null,null,object
因为它期望键为0,1,2,3,4
我是愚蠢还是什么? :-)我们可以为字符串做正确的,所以为什么不是非连续数字呢?
我想避免的是每次我想访问其中的特定人时,必须遍历数组中的每个单个对象,因此我认为使用ID号作为键将起作用
谢谢你们! : - )
答案 0 :(得分:7)
使用字典对象
var people = {};
people[4] = 'me';
答案 1 :(得分:3)
我建议你使用收藏品。集合是一组对象。然后,您可以传递每个人的属性。您可以按任何属性过滤您的收藏。如此接近你正在做的事情,但不是转发索引,而是为每个人传递id
。
var people = []; // a collection
var person = {
id: 4,
name: 'John'
};
people.push(person);
// Filtering:
// By id
var john = people.filter(function(person) {
return person.id == 4;
});
// By name
var john = people.filter(function(person) {
return person.name == 'John';
});
您可以抽象上面的循环来重复使用它们。还要确保你的身份证是独一无二的。如果数据来自数据库应该没问题,否则我会在某处跟踪它们。
与具有键的普通对象相比,集合的优势在于您可以对其进行排序和过滤,而在不保证属性顺序的对象中,您不能这么简单。
请注意,filter
仅适用于“现代浏览器”,因此适用于IE9 +,但旧版浏览器有polyfills。
答案 2 :(得分:1)
当我们使用字符串作为键时,如下所示:
var people = {}; //this is an object
people[name] = 'toto';
我们正在为此对象添加新属性,因为javascript中的每个对象都可以看作是哈希表。
如果您使用数组,它仍然是一个对象,您可以使用字符串作为键为其添加属性。但是如果你执行类似people[4] = 'toto';
的操作,那么你要在数组中添加一个字符串,那么数组的长度就会变为5.当然,数字4仍然是这个数组对象的属性。