2017-02-07 3 views
-1

Wie kann ich dies in Javascript geschehen?Javascript Sammlung eines Objekts zugänglich durch Schlüssel

People[key1][0].FirstName = "First1-k1"; 
People[key1][0].LastName = "Last1-k1"; 
People[key1][1].FirstName = "First2-k1"; 
People[key1][1].LastName = "Last2-k1"; 
People[key2][0].FirstName = "First1-k2"; 
People[key2][0].LastName = "Last1-k2"; 
People[key2][1].FirstName = "First2-k2"; 
People[key2][1].LastName = "Last2-k2"; 

Oder vielleicht:

People[key2].Index[1].LastName = "Last2-k2"; 

Andere Klarstellung:

SomeObject["somekey"][0].FirstName = "whatever"; 
SomeObject["somekey"][1].FirstName = "whatever"; 
SomeObject["someotherkey"][0].FirstName = "whatever"; 
SomeObject["someotherkey"][1].FirstName = "whatever"; 

Dank

+1

'Schlüssel1' ist eine Variable (als' Schlüssel2', Sie nennen es ...). Was ist der Wert davon? –

+0

Meinst du 'var people = {" key1 ": {" Vorname: "First1-k1", "Nachname": "Last1-k1"}, "key2": {......}} 'then' people ["key1"] 'erhält FirstName und LastName von key1 oder' var families = {"fam1": [{"Vorname:" First1-k1 "," LastName ":" Last1-k1 "}, {" Vorname: "First1-k2", "LastName": "Last1-k2"}]} 'dann' people ["fam1"] [1] 'bekommt Vorname und Nachname von fam1 Nummer 1 – mplungjan

+0

Ich muss eine Sammlung von Zeilen einfügen Leute [Schlüssel1] sowie Leute [Schlüssel2], Leute [Schlüssel3] ... usw. Vielleicht etwas wie: Leute [thekey] .FirstName [0], Leute [thekey] .FistName [1] .. usw. – Hawker

Antwort

0

Wenn sie zusammen mit Eigenschaften und Indizes, Sie sprechen über Objekte (die Eigenschaften) und Arrays (die Indizes haben).

Ihre erste Syntax: People[key1], impliziert, dass People entweder ein Array, in dem key1 ist eine Variable eine nicht-negative Zahl Halten oder People ist ein Objekt in dem key1 ein String ist, wie der Name einer Eigenschaft des dienen Objekt.

So könnten Sie haben:

var People = ["John","Paul","Ringo","George"]; 
 
    var key1 = 3; // Arrays use non-negative numbers as indexes 
 
    console.log(People[key1]); // "George"

Oder könnten Sie haben:

var People = { 
 
     first:"John", 
 
     last: "Lennon" 
 
    } 
 

 
    var key1 = "first"; // Objects use strings as property names 
 
    console.log(People[key1]); // "John"

Wenn wir nun den Code weiter: People[key1][0], geben Sie an, dass key1 mit einer Nummer indiziert werden sollte, so dass People[key1] ein Array zurückgeben soll.Dies würde bedeuten, dass People könnte ein Array mit Arrays sein, oder ein Objekt mit Arrays als Eigenschaften:

Array mit verschachtelten Arrays:

 var People = [ 
 
     ["John","Paul","Ringo","George"], 
 
     ["Moe","Larry","Curly","Shemp"] 
 
    ]; 
 

 
    var key1 = 1; 
 
    console.log(People[key1][0]); // "Moe"

Objekt mit Arrays als Eigenschaftswert:

 var People = { 
 
     Beatles: ["John","Paul","Ringo","George"], 
 
     ThreeStooges: ["Moe","Larry","Curly","Shemp"] 
 
    }; 
 

 
    var key1 = "Beatles"; 
 
    console.log(People[key1][0]); // "John"

Schließlich, wenn wir Ihre letzten Teile der Syntax hinzufügen: People[key1][0].FirstName, können wir sehen, dass People[key1][0] muss ein Objekt zurückgegeben werden, weil Sie einen Namen für den Zugriff bereitstellen, so dass die endgültige Struktur noch Array oder Objekte verwenden könnte, könnte aber aussehen wie diese:

Array mit verschachtelten Arrays, die Objekte enthalten, die Eigenschaften haben:

var People = [ 
 
     [ 
 
      { firstName: "John" }, 
 
      { firstName: "Paul"} , 
 
      { firstName: "Ringo"} , 
 
      { firstName: "George"} 
 
     ], 
 
     [ 
 
      { firstName:"Moe", lastName: "Stooge" }, 
 
      { firstName: "Larry", lastName: "Stooge" }, 
 
      { firstName: "Curly", lastName: "Stooge" }, 
 
      { firstName:"Shemp", lastName: "Stooge" } 
 
     ] 
 
    ]; 
 

 
    var key1 = 1; 
 
    console.log(People[key1][0].firstName); // "Moe" 
 

 
    People[key1][0].firstName = "First-K2"; 
 
    console.log(People[key1][0].firstName); // "First-K2"

Objekt mit Arrays als Eigenschaftswerte, die Objekte speichern, die Eigenschaften haben:

var People = { 
 
     Beatles: [ 
 
      { firstName: "John" }, 
 
      { firstName: "Paul"} , 
 
      { firstName: "Ringo"} , 
 
      { firstName: "George"} 
 
     ], 
 
     ThreeStooges: [ 
 
      { firstName:"Moe", lastName: "Stooge" }, 
 
      { firstName: "Larry", lastName: "Stooge" }, 
 
      { firstName: "Curly", lastName: "Stooge" }, 
 
      { firstName:"Shemp", lastName: "Stooge" } 
 
     ] 
 
    }; 
 

 
    var key1 = "Beatles"; 
 
    console.log(People[key1][0].firstName); // "John" 
 

 
    People[key1][0].firstName = "First-K2"; 
 
    console.log(People[key1][0].firstName); // "First-K2"

Jetzt, während die Syntax zwei verschiedene Strukturen bedeuten könnte, dass beide arbeiten könnten, die Sie wirklich brauchen einige Zeit zu verbringen und denken darüber von innen nach außen. Sie scheinen Objekte mit einer firstName Eigenschaft als das tiefste Konstrukt in Ihrer Struktur zu haben, aber von dort arbeiten Sie anscheinend nur Schichten ohne besonderen Grund. Sollen die Objekte mit firstName Eigenschaften aufzählbar sein? Wenn ja, ist es sinnvoll, sie in einem Array zu haben. Aber warum sollte man sie weiter verpacken? Sie müssen sich entscheiden.

+0

Vielen Dank @Scott Marcus! Der letzte Teil des Codes, den du erwähnt hast, war genau das, wonach ich gesucht habe. Es ist einfach zu schwer zu erklären, warum ich es so brauchte. Es ist Teil einer AngularJS App, die ich mache. Eigentlich haben Leute Namen nichts mit meinem Code zu tun, ich habe es nur als Beispiel benutzt. Das tatsächliche Objekt sieht eher wie folgt aus: 'OptionsLevel1 [OptionSubtypeID] [index] .OptionID' und' OptionsLevel1 [OptionSubtypeID] [index] .OptionName'. Es würde ewig dauern, um die ganze Sache zu erklären .... aber trotzdem, danke! – Hawker

+0

@Hawker Sie sind willkommen. Bitte vergessen Sie nicht zu stimmen und markieren Sie meinen Beitrag als Antwort. Viel Glück! –

+0

Aus irgendeinem Grund, da ich neu mit Stackoverflow bin, wird es nicht meine 'Up Vote' anzeigen lassen. Und wie markiere ich es als beantwortet? Außerdem wurde diese Frage als "On Hold" markiert, was mich nervt. Du hast die Frage offensichtlich verstanden, also warum ist sie in die Warteschleife geraten, weil ein paar andere es nicht verstanden haben? – Hawker

Verwandte Themen