Arrays in JavaScript sind durch Zahlen indiziert (oder zumindest sein sollte).
persons['data'].push(bob);
persons['data'].push(fill);
persons['data'].push(mark);
persons[2]
verwenden würden Sie {name: 'Mark', Alter: 19}.
Während Javascript ist so flexibel, dass Sie tun können, wie in @Sasa beantworten und String-Indizes verwenden, können Sie von anderen Entwicklern Kniescheiben, wenn Sie tun, da dies eine sehr schlechte Praxis ist.
[ADDED] Betrachten Sie diese Beispiele für seltsame und unerwartetes Verhalten:
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()); // false - WTF?
console.log('lastIndexOf should be 1?', ary.lastIndexOf(true)); // -1 WTF?
Arrays in Javascript sollte als Stapel verwendet werden. Denken Sie an einen Stapel Karten, Sie fügen entweder hinzu (drücken) oder nehmen Karten weg (ziehen), aber Sie wissen nicht, welche Karte wo ist (es sei denn, Sie betrügen).
Wenn Sie eine Liste von Personen mit Namen möchte Sie ein Objekt speichern Personen verwenden:
persons.data = {};
persons['data']['Bob'] = bob;
Oder alternativ können Sie das Array filter Werte zu erhalten, die ein Prädikat entsprechen:
bob = persons.data.filter(function(person){
return person["name"] === 'Bob';
})[0];
EDIT:
Example eine Funktion, die eine Person würde erstellen oder finden:
var persons = { data : [] }
persons.data.push({ name: 'Bob', age: 10 })
// returns the index of the newly added person
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); // 1
console.log(persons.data[0].age); // 11
persons.addOrReplace({ name: 'Joe', age: 11 });
console.log(persons.data.length); // 2
console.log(persons.data[persons.data.length -1].name); // Joe
Was passiert, wenn zwei Personen den gleichen Namen haben? – axelduch
In diesem Fall müssen wir eine existierende Person (John) aktualisieren. Dieses Array ist wie ein 'Set'. – Alex