Freecodecamp: Acessando Propriedades de Objetos com Variáveis ​​Confundindo?

Criado em 21 dez. 2016  ·  10Comentários  ·  Fonte: freeCodeCamp/freeCodeCamp


Nome do Desafio


Acessando Propriedades de Objetos com Variáveis

descrição do problema


Esse desafio me confunde. Desde em desafios anteriores com acesso a objetos. Eu li que os colchetes devem ser usados ​​apenas quando há um espaço na propriedade que você precisa acessar. E agora, neste desafio, eles querem que eu use a notação de colchetes quando a propriedade não tiver um espaço

help wanted

Comentários muito úteis

@ChrisKissoon A notação de colchetes é útil quando você precisa acessar uma propriedade cujo nome é coletado dinamicamente durante a execução do programa.
por exemplo

var obj = {
  propName : "John"
}

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

var someProp = propPrefix("Name")

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

Podemos explicar esse conceito na descrição, se não for muito detalhado

Todos 10 comentários

/ cc @ FreeCodeCamp / moderators
Alguém pode ajudar na triagem se as instruções precisarem de mais esclarecimentos? Posso ser tendencioso, mas eles parecem diretos para mim.

@ChrisKissoon A notação de colchetes é útil quando você precisa acessar uma propriedade cujo nome é coletado dinamicamente durante a execução do programa.
por exemplo

var obj = {
  propName : "John"
}

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

var someProp = propPrefix("Name")

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

Podemos explicar esse conceito na descrição, se não for muito detalhado

Obrigado @ Emt-Ant, precisamos atualizar as instruções para mais esclarecimentos? Sua opinião?

@raisedadead @ Em-Ant,
Eu posso entender as confusões, imho atualizar com mais esclarecimentos parece uma boa ideia.

Para pessoas mais novas com um exemplo como este:

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

é fácil pensar: "Por que não fazer apenas myObj.propName, já que estamos fazendo a mesma coisa"

Novamente, o segundo exemplo:

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

faz a mesma coisa. Ele apenas anexa o valor a uma variável. Por que ainda precisamos de uma variável ?? Eu definitivamente acho que devemos adicionar como o que @ Em-Ant disse, um exemplo onde a variável é alterada dinamicamente. Porque se você está apenas definindo uma variável igual a uma string e usando a variável, não faz sentido. Seria mais prático usar apenas a notação de ponto. O desafio não faz sentido, a menos que você explique por que precisaríamos usar uma variável em primeiro lugar, em vez da notação de ponto. Portanto, meu voto é adicionar outro exemplo e esclarecer por que usar uma variável.

@IsaacAbrahamson obrigado.

Os contribuidores também precisam refatorar este desafio junto com Updating Object Properties . Comente abaixo com refatoração sugerida para ambos antes de fazer uma solicitação de pull.

/ cc @erictleung pensamentos?

Olá @raisedadead ,
Ao ler todas as questões relacionadas às notações de objeto, entendi que não é óbvio para um iniciante. Eles pareciam diretos para mim. Para tornar ainda mais simples, como fazer essas alterações.

Acessando objetos: (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" 

Não vejo nenhum problema com a atualização de objetos. Corrija-me se eu estiver errado.
Até eu estou pensando em adicionar o desafio de objetos aninhados. Deixe-me saber como posso ajudar a melhorar isso.

@raisedadead, vamos ver se consigo resolver esse problema de objeto.

Os contribuidores também precisam refatorar este desafio junto com Updating Object Properties . Comente abaixo com refatoração sugerida para ambos antes de fazer uma solicitação de pull.

Portanto, para o desafio inicial em objetos, "Construir objetos JavaScript" , o objeto de amostra tem todas as propriedades sendo strings. Talvez possamos adicionar outro objeto de amostra com diferentes propriedades tipadas, como

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

Isso _pode_ ser mais confuso, mas explora as possibilidades dos objetos, o que pode levar os campistas a investigar um pouco. Além disso, o código-semente para "Acessando Propriedades de Objetos com Variáveis" tem números como propriedades, que não foram mostrados nos três desafios anteriores sobre objetos.


Eu li que os colchetes devem ser usados ​​apenas quando há um espaço na propriedade que você precisa acessar.

Isso pode ser corrigido alterando como eles são notação de colchetes é descrito em "Acessando propriedades de objeto com notação de colchetes" . As instruções

Se a propriedade do objeto que você está tentando acessar contiver um espaço, você precisará usar a notação de colchetes.

poderia ser alterado para algo como

Se a propriedade do objeto que você está tentando acessar contiver um espaço, você precisará usar a notação de colchetes. No entanto, você ainda pode usar a notação de colchetes em propriedades sem espaços.

E então podemos modificar o objeto de amostra para mostrar que você também pode ter propriedades sem espaços.

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

Para "Acessando Propriedades do Objeto com Variáveis" , gosto da sugestão de @Em-Ant para substituir, digamos, o primeiro exemplo, ou seja, remover

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

e movendo o exemplo de objeto dogs como o primeiro exemplo e ter algo como

var obj = {
  propName : "John"
}

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

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

como o segundo exemplo.

Que tal dizer que a notação de colchetes é uma forma mais dinâmica de manipular objetos. Você pode usar strings que podem sair da maioria das regras de declaração de JavaScript, como começar com números e usar string a com espaços como nomes de propriedade. Você também pode colocar variáveis ​​dentro de colchetes, permitindo que as propriedades sejam atribuídas imediatamente ou por meio de algum efeito colateral. Digamos, por exemplo, que você tenha um objeto em seu programa e não tenha certeza do que as propriedades precisam ser durante a criação, então permite que o programa as atribua durante o tempo de execução.

Esta página foi útil?
0 / 5 - 0 avaliações