Obtenez de l'objet nom de la propriété comme une chaîne de caractères
Est-il possible d'obtenir le nom de propriété d'objet comme une chaîne de caractères
person = {};
person.first_name = 'Jack';
person.last_name = 'Trades';
person.address = {};
person.address.street = 'Factory 1';
person.address.country = 'USA';
J'aimerais l'utiliser comme ceci:
var pn = propName( person.address.country ); //should return 'country' or 'person.address.country'
var pn = propName( person.first_name ); //should return 'first_name' or 'person.first_name'
NOTE: ce code est exactement ce que je cherche. Je comprends que ça sonne même stupide, mais il ne l'est pas.
C'est ce que je veux faire avec elle.
HTML
person = {};
person.id_first_name = 'Jack';
person.id_last_name = 'Trades';
person.address = {};
person.address.id_address = 'Factory 1';
person.address.id_country = 'USA';
extPort.postMessage
(
{
message : MSG_ACTION,
propName( person.first_name ): person.first_name
}
};
----------------------RÉPONSE-----------------------
Obtenu grâce à l'ibu. Il a fait de la bonne façon et j'ai utilisé une fonction récursive
var res = '';
function propName(prop, value) {
for (var i in prop) {
if (typeof prop[i] == 'object') {
if (propName(prop[i], value)) {
return res;
}
} else {
if (prop[i] == value) {
res = i;
return res;
}
}
}
return undefined;
}
var pn = propName(person, person.first_name); //returns 'first_name'
var pn = propName(person, person.address.country); //returns 'country'
DÉMO: http://jsbin.com/iyabal/1/edit
- Je suis confus... pourquoi voulez-vous le nom de la propriété de retourner la même chose que vous nourrir? Vous connaissez déjà le nom de la propriété, puis... Si vous êtes à la recherche d'un moyen pour parcourir à l'aide des propriétés, vous pouvez utiliser le support de la notation et de la boucle à travers les touches, comme également les propriétés de hachage indices
- Vous devez également passer une référence à l'objet dans la fonction.
- Pas automatiquement. La chaîne référencé par
country
propriété ne sais rien à propos de laaddress
objet, et l'objet référencé par laaddress
propriété ne sais rien à propos de laperson
objet. - Je comprends ce qui peut être déroutant, mais c'est exactement ce dont j'ai besoin. J'ai besoin du nom de la propriété comme une chaîne de caractères difficiles
- afin de vous signifier var pn = propName("états-unis");
- J'aimerais aider, mais jsFiddle est actuellement de répondre
-.-
- pas de. le code que j'ai posté est ce dont j'ai besoin. fondamentalement, l'hélice nom est l'ID de l'élément de la page et je veux apprendre à l'utiliser.
- Vous avez besoin de transmettre explicitement comme des valeurs distinctes.
- Vous voulez utiliser l'ID pour obtenir de l'hélice, ou de l'hélice pour obtenir l'ID?
- CodePen.io est mieux que jsFiddle de toute façon 😉
- Vous avez vraiment besoin de clarifier votre question, peut-être ajouter l'exemple de code html. Regarde les réponses, 4 personnes ont 4 différentes interprétations!!!
- L'exemple de code ne fonctionnera pas comme vous êtes en fait juste en passant la valeur de cette propriété, et non une référence à la propriété. Votre premier exemple serait pass 'USA' pour la fonction n'est pas utile pour votre résultat souhaité.
- Voulez-vous le faire juste parce que vous aimez le style de codage, ou travaillez-vous avec certains immuable code que vous devez utiliser de cette façon? Quelles sont vos contraintes?
- Et jsbin.com/iyabal/2/edit montre la faille avec cette approche.
- -1 Désolé, votre code est vraiment une mauvaise pratique. Voir cet exemple: jsbin.com/iyabal/4/edit et ... en.wikipedia.org/wiki/Nestor_Burma comme une référence 😉
- oui, vous êtes à la fois à droite et j'ai dopé à cette ligne de pensée. Je suis l'envoi d'un tableau comme paramètre maintenant, et ça fonctionne très bien. merci quand même.
- double possible de JavaScript: Obtention de l'objet nom de la propriété
- Ce serait utile au lieu de passer des chaînes autour de représentant d'un nom de propriété d'objet. Vous pouvez alors la vérification statique, refactoring ou d'amputation.
- automatique nom de la propriété à un objet créé
- automatique nom de la propriété pour un objet créé vous pouvez avoir un coup d'oeil à cet exemple.. 😉
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez, avec un peu de changement.
Maintenant, vous pouvez obtenir la valeur de la sorte:
Note je ne suis pas sûr de ce qu'il peut être utilisé pour.
Autre Remarque ne fonctionnent pas très bien avec les objets imbriqués. mais là encore, voir la première note.
Je sais que les meilleures pratiques, à l'aide de Objet.les touches(your_object). Il analyse de tableau nom de la propriété pour vous. Exemple:
J'espère que cet exemple est utile pour vous.
Vous pouvez envelopper vos biens dans une fonction, puis de convertir la fonction d'une chaîne et d'obtenir la propriété hors de lui.
Par exemple:
Puis de l'utiliser:
Attention, minifiers pourrait briser ce.
Edit: j'ai créé un compilateur de les transformer en œuvres avec babel et le tapuscrit compilateur (voir ts-nameof). C'est beaucoup plus fiable que de faire quelque chose au moment de l'exécution.
Vous pouvez accomplir cela en convertissant toutes les propriétés de l'objet dans les fonctions de, qui sera de retour le leur propre nom
Non, il n'est pas possible.
Imaginez ceci:
La référence au nom de la propriété est tout simplement perdu dans ce processus.
Suite sur @David Sherret réponse avec ES6, il peut être fait super simple:
Vous pouvez créer un namespacing méthode de l'objet. La méthode aura besoin de la mutation de l'objet, de sorte que les cordes devient un objet au lieu de tenir deux propriétés, un
value
et un_namespace
.DÉMO: http://jsfiddle.net/y4Y8p/1/
Alors maintenant, vous pouvez le faire:
Je suis dans la même situation.
Ici est ta façon de le faire à l'aide de Lodash ou Trait de soulignement de la bibliothèque, avec une limitation de valeur pour être unique:
Plaine JavaScript
Mais, je préfère corriger le code comme solution. Un exemple:
Je préfère propre et simple comme ceci:
Je suis en retard à la fête, mais j'ai pris une approche complètement différente, donc je vais jeter dans mon approche et voir ce que la communauté pense.
J'ai utilisé
Function.le prototype.nom
à faire ce que je veux.mes propriétés sont des fonctions que lorsqu'il est appelé à retourner la valeur de la propriété, et je peux obtenir le nom de la propriété (qui est une fonction) à l'aide de
.name
Voici un exemple:
Remarque:
vous ne pouvez pas facilement changer la valeur d'une propriété (e.g prenom) au moment de l'exécution dans ce cas.
vous devez créer une fonction (
.name
serait anonyme dans ce cas) et cette fonction doit retourner une nouvelle fonction qui retourne la nouvelle valeur:L'Utilisation D'Un Proxy:
JS: