Triés Application De La Feuille De

Ma Tâche

Dans mon code JavaScript, je suis souvent à l'aide d'objets à "la carte" des clés à des valeurs afin que je puisse ensuite accéder directement à travers une certaine valeur. Par exemple:

var helloMap = {};
helloMap.de = "Hallo";
helloMap["en"] = "Hello";
helloMap.es = "Hola";

Donc j'ai créer l'objet de plan étape par étape dans mon code source à l'aide de deux notations style d'objet et tableau de style.

Plus tard, je peux alors accéder aux valeurs, j'ai ajouté par helloMap["de"] par exemple. Donc c'est bon si je n'ai pas de soins sur l'ordre dans lequel les attributs a été définie sur l'objet.

Si je veux parcourir les propriétés des objets maintenant, autant que je sache, il n'y a aucun moyen de s'assurer que je vais réitérer dans l'ordre où ils ont été ajoutés.

Remarque: je ne peux pas utiliser certains objet wrapper et il suffit de maintenir un tableau et puis il y utiliser ses méthodes pour ajouter les valeurs donc quelque chose comme ceci:

var HelloMap = function(){
  this.myMap = [];
  this.addProperty = function(key, value){
    this.myMap.push({key: key, value: value});
  }
}

ou quelque chose de similaire ne fonctionne pas pour moi. Donc, la solution doit être absolument transparent pour le programmeur à l'aide de l'objet.

Que dit l'objet que je serait un objet vide, qui maintient l'ordre des propriétés qui ont été ajoutées. Quelque chose comme ceci:

var helloMap = {};
helloMap = getOrderAwareObject(helloMap);

de sorte que chaque assignation de la forme helloMap.xy = "foo" et helloMap["yz"] = "bar" serait suivi dans l'objet "dans l'ordre",

Solutions Possibles

Depuis je n'ai pas trouvé de solution dans le trait de soulignement ou jQuery m'avoir donné un objet spécial, je suis tombé sur la possibilité de définir des accesseurs et mutateurs pour les propriétés à des objets JavaScript avec Object.defineProperty depuis que je peux compter sur ECMAScript 5 standard je peux l'utiliser.

Le Problème avec ceci est que vous devez connaître toutes les propriétés qui peuvent être définies sur l'objet, avant qu'ils sont en réalité set. Car si vous définir il vous faut nom.

Ce que je cherche, c'est quelque chose comme un par Défaut de lecture et par Défaut Setter qui s'applique sur l'objet, si pas de getter et setter a été définie pour la propriété. De sorte que je ne puis cacher la triés carte derrière l'objet inteface.

  • Il y a déjà une solution pour cela dans n'importe quel cadre vous savez?
  • Est-il un mécanisme comme "par défaut getter/setter" ?
Si l'ordre est important, alors vous devez utiliser un Tableau.
Oui.. bien.. merci. Mais le problème avec les tableaux associatifs est qu'ils ne peuvent pas être accessibles via l'opérateur point dont j'ai besoin. Et en passant... êtes-vous sûr qu'ils tiennent même theire commande?
Javascript n'est pas de faire des tableaux associatifs. Vous pouvez définir les propriétés de la Matrice, mais ils sont indépendants de Tableau indexé éléments, et sont sans ordre de la même manière que les propriétés d'une plaine js objet.
Ok merci des Tableaux aura pas de solution ici. Au moins dans le "front" de la mise en œuvre. L'objet peuvent vif un tableau dans le dos, mais qui doit être transparent sur le côté d'objet.
Si l'ordre est important, la Matrice est la seule solution. Oui, vous pouvez le cacher à l'intérieur d'un objet construit.

OriginalL'auteur Chris | 2013-02-01