Comment convertir JS Objet Array
J'ai besoin de convertir une valeur de hachage de la carte
{
"fruit" : ["mango","orange"],
"veg" : ["carrot"]
}
à
[
{ "type" : "fruit" , "name" : ["mango","orange"] } ,
{ "type" : "veg" , "name" : ["carrot"] }
]
comment dois-je faire??
- Je voudrais savoir comment le faire de deux manières..
- s'il vous plaît, n'oubliez pas de toujours fournir un code identation, il rend la question plus facile à lire
- merci pour le modifier...en souviendra nxt temps..
- Notez que JavaScript n'a pas de "hash map", juste des "objets".
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire comme ceci (un extrait):
JS:
Ou, si vous ou quelqu'un d'autre a été l'extension de la
Object
prototype avec les propriétés énumérables (je pense que c'est une mauvaise pratique personnellement), alors vous pouvez l'utiliser pour protéger de la que:JS:
Et, à l'aide de quelques plus de fonctionnalités modernes:
JS:
hasOwnProperty
à l'intérieur de lafor...in
boucle.Object.prototype
?Object.prototype.test = 'test'
sur votre page, juste pour l'enfer de lui. BAM! Cassé votre script 😛javascript:Object.prototype.test = 'test'
dans la barre d'adresse. Script Greasemonkey/plugin de navigateur. De nombreuses façons.hasOwnProperty()
). Je n'ai pas personnellement permettre l'extension deObject
dans mes pages, donc je n'ai pas à ajouter un code supplémentaire pour protéger d'elle. Si j'étais dans un milieu où c'était possible, je voudrais le code pour le protéger de lui.Object.keys()
et.map()
et fait tous les exemples dans les extraits.Dans un navigateur qui prend en charge ES5 – ou lorsque vous avez ajouté un cale pour elle:
Voir: Objet.touches, La matrice de la carte
Ou, dans l'ancienne façon:
Veuillez noter que, dans les deux cas, le tableau de la valeur sont partagés, car en JS les objets sont passés par référence. Ainsi, par exemple,
stuff["fruit"]
etarray[0].name
points à la même référence de la matrice["mango", "orange"]
. Cela signifie que si vous modifiez l'un d'eux, l'autre sera changé:Pour éviter cela, vous pouvez utiliser tranche d'avoir un niveau de profondeur copie de votre tableau. Ainsi, dans le code ci-dessus, au lieu de:
vous aurez:
Espère que cela aide.
Pour ceux qui utilisent ES6 cartes...
En supposant que vous avez...
Vous pouvez utiliser...
Noter que Tableau.à partir de prend iterables ainsi que de la matrice comme des objets.
Je voudrais donner une "oneline" solution:
Économie de mots à votre service. Question posée pour la traduction d'un objet à un tableau, donc je ne suis pas la duplication de la réponse ci-dessus, n'est-ce pas?
Cela semble simple, la clé de votre carte est de type et les valeurs sont le nom, donc, juste loop thru carte et insérer un objet dans une liste par exemple
de sortie:
.hasOwnProperty()
méthodehasOwnProperty
, votrefor... in
boucle de lecture des valeurs de la chaîne de prototype. Par exempleObject.prototype.test = 'test'
. Votre boucle de lire cette valeur,hasOwnProperty
vérifie si la valeur est à partir de l'objet lui-même, et non pas de sa chaîne de prototype.Object.prototype
Object.prototype
, il n'est pas nécessaire. Il ne fait aucun sens d'utiliserhasOwnProperty
si vous ne l'avez pas fait.hasOwnProperty
de toute façon, donc si il y a un cas où c'est nécessaire, vous n'oublierez pas. 😛Object.prototype.test = 'test'
sur votre page?hasOwnProperty
va m'empêcher de casser votre page 🙂javascript:Object.prototype.test = 'test'
dans la barre d'adresse. Script Greasemonkey/plugin de navigateur. De nombreuses façons.hasOwnProperty
est facile? 😛Object.prototype
, vous devez cesser de l'utiliser. Et la Fusée exemple, était l'un de sabotage.Object.prototype
extensions si vous êtes vraiment inquiet à ce sujet.hasOwnProperty
assurez-vous que votre tableau est ce que vous voulez.Object.prototype
peut être étendu de manière légitime. Je pense que c'est une bonne habitude d'utiliserhasOwnProperty
, afin de ne pas les oublier quand c'est vraiment nécessaire. Il vous permettra de gagner des maux de tête.Object.prototype
est le cadet de vos soucis. Une requête AJAX ne fait aucune différence. Vous devez connaître le code que vous utilisez.for(var i in 12)
oufor(var i in "dog")
?hasOwnProperty
, et je n'ai pas entendu beaucoup de bons arguments pourquoi je ne devrais pas.Array.prototype.join = function(){alert("hacked!")}
maintenant, allez-vous dire que je devrais être à l'aide de n'importe quel ensemble de méthodes à tousObject.prototype.hasOwnProperty = function() { alert('foo'); }
?Pas exactement la réponse que vous cherchez, mais il pourrait être utile pour l'usage général.
Dans le cas de l'utilisation underscore.js:
Pas Besoin de boucle