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 la address objet, et l'objet référencé par la address propriété ne sais rien à propos de la person 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.. 😉

InformationsquelleAutor CLiFoS | 2012-11-28