Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组键查找_Javascript_Arrays - Fatal编程技术网

Javascript数组键查找

Javascript数组键查找,javascript,arrays,Javascript,Arrays,很抱歉,如果以前有人问过这个问题,这是很难找到的 我想使用javascript数组来保存对象,以键作为ID 例如,假设我有一群人有不同的ID var people = new Array(); var person = {property: value}; // this is person ID 4 var people[4] = person; 然后,我希望能够通过说people[ID].propery来引用该用户 问题是现在这个数组的输出是 null,null,null,nul

很抱歉,如果以前有人问过这个问题,这是很难找到的

我想使用javascript数组来保存对象,以键作为ID

例如,假设我有一群人有不同的ID

 var people = new Array();
 var person = {property: value}; // this is person ID 4

 var people[4] = person;
然后,我希望能够通过说people[ID].propery来引用该用户

问题是现在这个数组的输出是

 null,null,null,null,object
因为它期望密钥为0,1,2,3,4

我是不是很愚蠢?:-)我们可以对字符串这样做,为什么不使用非序数呢

我试图避免的是,每当我想访问数组中的某个特定对象时,就必须在数组中的每个对象上循环,因此我认为使用ID号作为密钥是可行的


谢谢大家!:-)

使用字典对象

var people = {};
people[4] = 'me';

当我们使用字符串作为键时,如下所示:

var people = {}; //this is an object
people[name] = 'toto';
我们正在向这个对象添加新属性,因为javascript中的每个对象都可以看作是一个哈希表


如果使用数组,它仍然是一个对象,则可以使用字符串作为键向其添加属性。但是如果你做了类似于
people[4]=“toto”,将字符串添加到数组中,数组的长度将变为5。当然,数字4仍然是这个数组对象的属性

我建议你使用收藏。集合是对象的数组。然后可以将属性传递给每个人。您可以按任何属性筛选集合。非常接近你正在做的事情,但不是传递索引,而是传递每个人的
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';
});
您可以抽象上面的那些循环以重用它们。还要确保您的id是唯一的。如果数据来自数据库,应该可以,否则我会在某个地方跟踪它们

与带键的普通对象相比,集合的优势在于可以排序和筛选,而对于属性顺序无法保证的对象,则无法做到如此简单


请注意,
filter
仅适用于“现代浏览器”,因此IE9+也适用于旧浏览器。

数组的
输出是什么意思?是的,JS中的数组是稀疏的,在这种情况下你最好考虑使用对象,但是我承认我仍然不理解你所展示的示例中的错误。“现在这个数组的输出将是“代码> null、null、null、null、对象< /代码>”-数组没有真正的“输出”。您的数组在索引4处有一个元素,如果您试图访问较低的索引,例如
people[2]
,您将得到
未定义的
,而不是
null
。在
var-people[4]=person中也有语法错误,您需要删除
var