Javascript数组键查找

时间:2013-09-07 21:07:44

标签: javascript arrays

如果以前曾经问到这个问题我很抱歉,这很难找到......

我想使用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号作为键将起作用

谢谢你们! : - )

3 个答案:

答案 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仍然是这个数组对象的属性。