Ajouter quelque chose à la cime d'un objet JSON
J'ai un objet JSON qui est déclenché lorsque la page est chargée, comme ceci:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Est-il un moyen d'insérer un élément avant de la première foo
élément, de sorte que lorsque vous faites un for var i in data
, le nouvel élément sera bouclé avant les éléments qui ont été ajoutés lorsque l'objet a été lancé?
La raison en est, je suis de l'affichage de certains éléments à l'utilisateur. Lorsque l'utilisateur ajoute un nouvel élément en javascript, je veux que ce nouvel élément sera affiché au-dessus de tous les éléments existants, cependant lorsque je l'ai ajouter le nouvel élément, je.e
data[newItem] = newItem;
Ensuite l'objet JSON ressemble à ceci:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;
Au lieu de ce que je veux, qui est:
data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Des idées?
OriginalL'auteur Click Upvote | 2012-05-27
Vous devez vous connecter pour publier un commentaire.
En JS, les propriétés de l'objet' ordre n'est pas garanti. Par conséquent, même si elles sont ordonnées dans la chaîne JSON, quand analysé comme un objet JS, vous n'aurez plus jamais prédire dans quel ordre ils arrivent.
Mieux utiliser des tableaux à la place. Vous pouvez utiliser le
unshift()
méthode pour placer l'élément dans le premier index.Pas une option, j'ai déjà codé comme un objet. Je vais devoir le changer dans une foule de lieux à utiliser un tableau. Ce qui est une façon de le faire fonctionner comme un objet?
donc, il n'y a pas moyen d'utiliser
data["foo"]
pour obtenir les données correspondantes..je me demandais si il y a des bibliothèques de simuler Python OrderedDict en JavaScriptEn outre, avec un tableau, j'aurais la même question. Dire qu'un ensemble est initalized avec 5 éléments, l'utilisateur ajoute un nouveau, et je veux le déplacer vers le début du tableau. Comment dois-je procéder?
Upvote Vous pouvez utiliser le tableau comme objet.
var arr = []; arr.foo = 'bar';
la seule chose c'est que vous ne serez pas capable d'accéder à lafoo
à l'intérieur d'unfor(var i = 0; i < arr.length; i++){...}
. Ainsi, votre code existant peut être même. Vous pouvez toujours accéder à l'intérieur defor(var key in data){...}
boucle, même si vous modifiez votredata = []
.OriginalL'auteur Joseph
Comme un compliment à Joseph le Rêveur's réponse, j'ai couru quelques vérifications rapides dans firefox & chrome.
Firefox:
Chrome:
OriginalL'auteur
Qui vient en premier dans le tableau:
fenêtre.objet ou d'une fenêtre.alerte?
Ni, les objets n'ont pas une commande. Si vous souhaitez utiliser un tableau un tableau. Les objets ne sont pas des tableaux.
Si vous voulez
Utiliser un tableau.
Si vous le souhaitez:
Utiliser un objet.
OriginalL'auteur Incognito
J'ai tombé sur ce et obtenu de l'aide:
const newObject = Object.assign({first: value}, oldObject)
Comme mentionné précédemment, l'ordre n'est pas garanti, mais pour moi, ce est assez bon. 🙂
OriginalL'auteur raubas
Au lieu d'ajouter une nouvelle valeur dans le même objet, vous pouvez créer un nouvel objet et de disposer des propriétés ordre que vous voulez.
exemple :
Afin de créer un nouvel objet avec une nouvelle propriété qui vous voulez sur le dessus:
et l'exécuter:
OriginalL'auteur virender nehra
Je pense que vous pouvez convertir en chaîne de caractères, ajouter vos données au début de la chaîne, puis re-convertir la chaîne json à l'aide de "eval"
J'ai essayé d'aider en donnant des idées
S'il vous plaît, allez la recherche pour laquelle vous ne devriez pas être en utilisant eval. Alors pourquoi vous ne devriez pas être la conversion d'objets de cordes et de retour...
Je serais heureux d'apprendre auprès de vous, pourquoi je ne devrais pas faire ça ?!
Lire cet article à partir du MDN
OriginalL'auteur Samir Adel