在Javascript中,数组是由数字索引的(或者至少应该是)。
persons['data'].push(bob);
persons['data'].push(fill);
persons['data'].push(mark);
使用persons[2]
将给您{name: 'Mark', age: 19}。
Javascript非常灵活,可以像@Sasa的回答一样使用字符串索引,但如果这样做,其他开发人员可能会削弱你,因为这是一种非常糟糕的做法。
[添加]
考虑以下这些奇怪和意外的行为示例:
var ary = [];
ary[0] = false;
ary['using string indexes in javascript arrays is stupid'] = true;
console.log('pop should return the last added element', ary.pop());
console.log('lastIndexOf should be 1?', ary.lastIndexOf(true));
Javascript中的数组应该用作栈。想象一下一叠纸牌,你可以添加(push)或取走(pull)牌,但是你不知道哪张牌在哪里(除非你作弊)。
如果您想按名称列出人员,则应使用对象存储人员:
persons.data = {}
persons['data']['Bob'] = bob
或者,您可以筛选数组以获取与谓词匹配的值:
bob = persons.data.filter(function(person){
return person["name"] === 'Bob';
})[0];
编辑:
示例:创建或查找一个人的函数。
var persons = { data : [] }
persons.data.push({ name: 'Bob', age: 10 })
persons.addOrReplace = function(new_person, attr) {
var attr = attr || 'name';
var data = this.data;
for (var i = 0; i < data.length; i++) {
if (data[i][attr] === new_person[attr]) {
data[i] = new_person;
return i;
}
}
return this.data.push(new_person);
}
persons.addOrReplace({ name: 'Bob', age: 11 });
console.log(persons.data.length);
console.log(persons.data[0].age);
persons.addOrReplace({ name: 'Joe', age: 11 });
console.log(persons.data.length);
console.log(persons.data[persons.data.length -1].name);