Freecodecamp: Accéder aux propriétés des objets avec des variables déroutantes?

Créé le 21 déc. 2016  ·  10Commentaires  ·  Source: freeCodeCamp/freeCodeCamp


Nom du défi


Accès aux propriétés des objets avec des variables

Description du problème


Ce défi me déroute. Depuis dans les défis précédents avec l'accès aux objets. J'ai lu que les crochets ne devraient être utilisés que lorsqu'il y a un espace dans la propriété auquel vous devez accéder. Et maintenant, dans ce défi, ils veulent que j'utilise la notation entre crochets lorsque la propriété n'a pas d'espace

help wanted

Commentaire le plus utile

La notation
par exemple

var obj = {
  propName : "John"
}

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

var someProp = propPrefix("Name")

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

On pourrait expliquer ce concept dans la description, si ce n'est pas trop verbeux

Tous les 10 commentaires

/ cc @ FreeCodeCamp / modérateurs
Quelqu'un peut-il aider à trier si les instructions ont besoin de plus de précisions? Je suis peut-être partial, mais ils me semblent directs.

La notation
par exemple

var obj = {
  propName : "John"
}

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

var someProp = propPrefix("Name")

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

On pourrait expliquer ce concept dans la description, si ce n'est pas trop verbeux

Merci @ Emt-Ant, devons-nous mettre à jour les instructions pour plus de précisions? Votre opinion?

@raisedadead @ Em-Ant,
Je peux comprendre les confusions, à mon avis, la mise à jour avec plus de clarification semble être une bonne idée.

Pour les nouvelles personnes avec un exemple comme celui-ci:

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

il est facile de penser: "Pourquoi ne pas simplement faire myObj.propName puisque nous faisons la même chose"

Encore une fois, le deuxième exemple:

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

fait la même chose. Il attache simplement la valeur à une variable. Pourquoi avons-nous même besoin d'une variable ?? Je pense vraiment que nous devrions ajouter comme ce que @ Em-Ant a dit, un exemple où la variable est modifiée dynamiquement. Parce que si vous définissez simplement une variable égale à une chaîne et que vous utilisez la variable, cela n'a aucun sens. Il serait plus pratique d'utiliser simplement la notation par points. Le défi n'a aucun sens à moins que vous expliquiez pourquoi nous aurions besoin d'utiliser une variable en premier lieu au lieu de la notation par points. Mon vote consiste donc à ajouter un autre exemple et à clarifier pourquoi utiliser une variable.

@IsaacAbrahamson merci.

Les contributeurs doivent également refactoriser ce défi avec Updating Object Properties . Veuillez commenter ci-dessous avec la refactorisation suggérée pour les deux avant de faire une demande d'extraction.

/ cc @erictleung pensées?

Veuillez également vérifier @systimotic ' https://github.com/FreeCodeCamp/FreeCodeCamp/issues/12125#issuecomment -269246606

Salut @raisedadead ,
En lisant tous les problèmes liés aux notations d'objets, j'ai compris que ce n'est pas évident pour un débutant. Ils me semblaient droits. Afin de rendre encore plus simple comment faire ces changements.

Accès aux objets: (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" 

Je ne vois aucun problème avec la mise à jour des objets. Corrige moi si je me trompe.
Même je pense ajouter le défi Objets imbriqués. Faites-moi savoir comment je peux contribuer à améliorer cette situation.

@raisedadead voyons si je peux résoudre ce problème d'objet.

Les contributeurs doivent également refactoriser ce défi avec Updating Object Properties . Veuillez commenter ci-dessous avec la refactorisation suggérée pour les deux avant de faire une demande d'extraction.

Donc, pour le défi initial sur les objets, "Créer des objets JavaScript" , l'exemple d'objet a toutes les propriétés en tant que chaînes. Peut-être pouvons-nous ajouter un autre exemple d'objet avec différentes propriétés typées, comme

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

Cela pourrait être plus déroutant, mais cela explore les possibilités des objets, ce qui peut inciter les campeurs à enquêter un peu. De plus, le code de départ pour «Accéder aux propriétés des objets avec des variables» a des nombres comme propriétés, ce qui n'a pas été montré dans les trois défis précédents sur les objets.


J'ai lu que les crochets ne devraient être utilisés que lorsqu'il y a un espace dans la propriété auquel vous devez accéder.

Cela pourrait être résolu en changeant la façon dont ils sont la notation entre crochets est décrite dans «Accès aux propriétés des objets avec la notation entre crochets

Si la propriété de l'objet auquel vous essayez d'accéder contient un espace, vous devrez utiliser la notation entre crochets.

pourrait être changé en quelque chose comme

Si la propriété de l'objet auquel vous essayez d'accéder contient un espace, vous devrez utiliser la notation entre crochets. Cependant, vous pouvez toujours utiliser la notation entre crochets sur les propriétés sans espaces.

Et puis nous pouvons modifier l'exemple d'objet pour montrer que vous pouvez également avoir des propriétés sans espaces.

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

Pour "Accéder aux propriétés d'objets avec des variables" , j'aime la suggestion de @ Em-Ant de remplacer, disons, le premier exemple, à savoir la suppression

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

et déplacer l'exemple d'objet dogs comme premier exemple et avoir quelque chose comme

var obj = {
  propName : "John"
}

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

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

comme deuxième exemple.

Que diriez-vous de dire que la notation entre crochets est une forme plus dynamique de manipulation d'objets. Vous pouvez utiliser des chaînes qui peuvent sortir de la plupart des règles de déclaration JavaScript, comme commencer par des nombres et utiliser la chaîne a avec des espaces comme noms de propriété. Vous pouvez également placer des variables entre crochets, ce qui permet d'attribuer des propriétés à la volée ou via un effet secondaire. Supposons, par exemple, que vous ayez un objet dans votre programme et que vous ne soyez pas sûr de ce que les propriétés doivent être lors de la création, vous autorisez donc le programme à les affecter pendant l'exécution.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Tzahile picture Tzahile  ·  3Commentaires

trashtalka3000 picture trashtalka3000  ·  3Commentaires

ar5had picture ar5had  ·  3Commentaires

SaintPeter picture SaintPeter  ·  3Commentaires

itsmikewest picture itsmikewest  ·  3Commentaires