Javascript数组键查找
很抱歉,如果以前有人问过这个问题,这是很难找到的 我想使用javascript数组来保存对象,以键作为ID 例如,假设我有一群人有不同的IDJavascript数组键查找,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
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
。