Freecodecamp: Zugriff auf Objekteigenschaften mit verwirrenden Variablen?

Erstellt am 21. Dez. 2016  ·  10Kommentare  ·  Quelle: freeCodeCamp/freeCodeCamp


Name der Herausforderung


Zugriff auf Objekteigenschaften mit Variablen

Fehlerbeschreibung


Diese Herausforderung verwirrt mich. Da in früheren Herausforderungen mit dem Zugriff auf Objekte. Ich habe gelesen, dass eckige Klammern nur verwendet werden sollten, wenn in der Eigenschaft ein Leerzeichen vorhanden ist, auf das Sie zugreifen müssen. Und jetzt wollen sie, dass ich bei dieser Herausforderung die Klammernotation verwende, wenn die Eigenschaft kein Leerzeichen hat

help wanted

Hilfreichster Kommentar

Die @ ChrisKissoon Bracket-Notation ist nützlich, wenn Sie auf eine Eigenschaft zugreifen müssen, deren Name während der Programmausführung dynamisch erfasst wird.
z.B

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name")

console.log(obj[someProp]) // -> "John"

Wir könnten dieses Konzept in der Beschreibung erklären, wenn es nicht zu ausführlich ist

Alle 10 Kommentare

/ cc @ FreeCodeCamp / moderators
Kann jemand beim Testen helfen, wenn die Anweisungen näher erläutert werden müssen? Ich mag voreingenommen sein, aber sie scheinen mir direkt zu sein.

Die @ ChrisKissoon Bracket-Notation ist nützlich, wenn Sie auf eine Eigenschaft zugreifen müssen, deren Name während der Programmausführung dynamisch erfasst wird.
z.B

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name")

console.log(obj[someProp]) // -> "John"

Wir könnten dieses Konzept in der Beschreibung erklären, wenn es nicht zu ausführlich ist

Danke @ Emt-Ant, müssen wir die Anweisungen für weitere Erläuterungen aktualisieren? Deine Meinung?

@raisedadead @ Em-Ant,
Ich kann die Verwirrungen verstehen, imho Aktualisierung mit mehr Klarheit klingt nach einer guten Idee.

Für neuere Leute mit einem Beispiel wie diesem:

var someProp = "propName";
var myObj = {
  propName: "Some Value"
}
myObj[someProp]; // "Some Value"

Es ist leicht zu denken: "Warum nicht einfach myObj.propName machen, da wir das Gleiche tun?"

Wieder das zweite Beispiel:

var myDog = "Hunter";
var dogs = {
  Fido: "Mutt",
  Hunter: "Doberman",
  Snoopie: "Beagle"
}
var breed = dogs[myDog];
console.log(breed);// "Doberman"

macht das gleiche. Es hängt nur den Wert an eine Variable an. Warum brauchen wir überhaupt eine Variable? Ich denke definitiv, dass wir wie das, was @ Em-Ant gesagt hat, ein Beispiel hinzufügen sollten, bei dem die Variable dynamisch geändert wird. Denn wenn Sie nur eine Variable gleich einer Zeichenfolge setzen und die Variable verwenden, macht dies keinen Sinn. Es wäre praktischer, nur die Punktnotation zu verwenden. Die Herausforderung macht keinen Sinn, es sei denn, Sie erklären, warum wir jemals eine Variable anstelle der Punktnotation verwenden müssten. Meine Stimme ist also, ein weiteres Beispiel hinzuzufügen und zu klären, warum eine Variable verwendet werden soll.

@IsaacAbrahamson danke.

Mitwirkende müssen diese Herausforderung zusammen mit Updating Object Properties umgestalten. Bitte kommentieren Sie unten mit dem vorgeschlagenen Refactoring für beide, bevor Sie eine Pull-Anfrage stellen.

/ cc @erictleung Gedanken?

Überprüfen Sie auch @systimotic ' https://github.com/FreeCodeCamp/FreeCodeCamp/issues/12125#issuecomment -269246606

Hallo @raisedadead ,
Durch das Lesen aller Probleme im Zusammenhang mit Objektnotationen habe ich verstanden, dass es für Anfänger nicht offensichtlich ist. Sie schienen mir direkt zu sein. Um es noch einfacher zu machen, wie wäre es mit diesen Änderungen.

Zugriff auf Objekte: (https://github.com/FreeCodeCamp/FreeCodeCamp/issues/12141)

var currency = {
   USA  : "dollar",
   London : "euro",
   India : "rupee",
}
function getCurrency(country){
 return country +" currency is "+currency[country] +" ";
}
getCurrency("USA") // "USA currency is dollar" 

Ich sehe kein Problem beim Aktualisieren von Objekten. Korrigiere mich, wenn ich falsch liege.
Sogar ich denke daran, eine Herausforderung für verschachtelte Objekte hinzuzufügen. Lassen Sie mich wissen, wie ich dazu beitragen kann, dies zu verbessern.

@raisedadead Mal sehen, ob ich dieses Objektproblem

Mitwirkende müssen diese Herausforderung zusammen mit Updating Object Properties umgestalten. Bitte kommentieren Sie unten mit dem vorgeschlagenen Refactoring für beide, bevor Sie eine Pull-Anfrage stellen.

Für die anfängliche Herausforderung für Objekte, "JavaScript-Objekte erstellen" , enthält das Beispielobjekt alle Eigenschaften, die Zeichenfolgen sind. Vielleicht können wir ein anderes Beispielobjekt mit anderen typisierten Eigenschaften hinzufügen, wie z

var sampleObject = {
  property_1: "Green",
  2: "Hal",
  "property_3": "Lantern"
};

Dies könnte verwirrender sein, aber es untersucht die Möglichkeiten von Objekten, die Camper dazu veranlassen können, ein wenig nachzuforschen. Außerdem enthält der Startcode für "Zugreifen auf Objekteigenschaften mit Variablen" Zahlen als Eigenschaften, die in den drei vorherigen Herausforderungen für Objekte nicht angezeigt wurden.


Ich habe gelesen, dass eckige Klammern nur verwendet werden sollten, wenn in der Eigenschaft ein Leerzeichen vorhanden ist, auf das Sie zugreifen müssen.

Dies kann behoben werden, indem die Art der Klammernotation unter "Zugreifen auf Objekteigenschaften mit Klammernotation" beschrieben wird . Die Anleitungen

Wenn die Eigenschaft des Objekts, auf das Sie zugreifen möchten, ein Leerzeichen enthält, müssen Sie die Klammernotation verwenden.

könnte zu so etwas geändert werden

Wenn die Eigenschaft des Objekts, auf das Sie zugreifen möchten, ein Leerzeichen enthält, müssen Sie die Klammernotation verwenden. Sie können jedoch weiterhin die Klammernotation für Eigenschaften ohne Leerzeichen verwenden.

Und dann können wir das Beispielobjekt ändern, um zu zeigen, dass Sie auch Eigenschaften ohne Leerzeichen haben können.

var myObj = {
  "Space Name": "Kirk",
  "More Space": "Spock",
  "NoSpace": "USS Enterprise"
};
myObj["Space Name"]; // Kirk
myObj['More Space']; // Spock
myObj["NoSpace"];    // USS Enterprise

Für "Zugriff auf Objekteigenschaften mit Variablen" gefällt mir der Vorschlag von @ Em-Ant, beispielsweise das erste Beispiel zu ersetzen, nämlich das Entfernen

var someProp = "propName";
var myObj = {
  propName: "Some Value"
}
myObj[someProp]; // "Some Value"

und Verschieben des dogs Objektbeispiels als erstes Beispiel und haben so etwas wie

var obj = {
  propName : "John"
}

function propPrefix(str) {
  var s = "prop";
  return s + str;
}

var someProp = propPrefix("Name");
console.log(obj[someProp]); // "John"

als zweites Beispiel.

Wie wäre es zu sagen, dass die Klammernotation eine dynamischere Form der Manipulation von Objekten ist? Sie können Zeichenfolgen verwenden, die außerhalb der meisten JavaScript-Deklarationsregeln liegen können, z. B. mit Zahlen beginnen und Zeichenfolge a mit Leerzeichen als Eigenschaftsnamen verwenden. Sie können Variablen auch in eckige Klammern setzen, sodass Eigenschaften im laufenden Betrieb oder über einen Nebeneffekt zugewiesen werden können. Angenommen, Sie haben ein Objekt in Ihrem Programm und sind sich nicht sicher, welche Eigenschaften während der Erstellung benötigt werden, damit das Programm sie zur Laufzeit zuweisen kann.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen