J'utilise un objet comme table de hachage. Je voudrais imprimer rapidement son contenu (pour alert()
par exemple). Y a-t-il quelque chose de construit pour convertir un hachage en tableaux de paires (clé, valeur)?Aplatir l'objet dans le tableau?
Répondre
Je mis à jour ce peu plus. C'est beaucoup plus facile à analyser que même console.log, car il laisse de côté les choses supplémentaires comme __proto__
.
function flatten(obj) {
var empty = true;
if (obj instanceof Array) {
str = '[';
empty = true;
for (var i=0;i<obj.length;i++) {
empty = false;
str += flatten(obj[i])+', ';
}
return (empty?str:str.slice(0,-2))+']';
} else if (obj instanceof Object) {
str = '{';
empty = true;
for (i in obj) {
empty = false;
str += i+'->'+flatten(obj[i])+', ';
}
return (empty?str:str.slice(0,-2))+'}';
} else {
return obj; // not an obj, don't stringify me
}
}
La seule chose que je ferais pour améliorer cela est de le mettre en retrait correctement en fonction du niveau de récursivité.
Pourquoi choisiriez-vous ceci sur 'console.log'? Pourquoi évitez-vous les options de débogage fantastique que votre navigateur vous fournit? –
Qui a dit que quelqu'un évitait 'console.log'? La question était de savoir comment aplatir les données. 'alert()' n'a été mentionné que "par exemple". Et s'il veut le renvoyer à un serveur via Ajax pour y être connecté? –
Je suis conscient de 'console.log' et il est certainement parfait pour la plupart de mes besoins de débogage. Cependant parfois, je trouve utile d'utiliser l'alerte pour savoir exactement quand quelque chose se passe. Le code qui vient directement après une alerte n'est pas exécuté tant que vous n'avez pas activé l'alerte. Généralement, lorsque ce comportement n'est pas souhaité, il y a peu de raison d'utiliser 'alert()'. –
Utilisez la boucle:
for (var x in yourObj)
{
alert(yourObj[x]);
}
de cette façon, vous ne verriez que les valeurs. Bute même si vous concentresz les clés aussi, il alerterait plusieurs fois probablement. Vous devez créer une chaîne et alerter la sortie finale. – jAndy
bien ceci est juste un exemple de la boucle for, pas une implémentation complète de ce que l'op veut. il devrait être capable de comprendre le reste. – m0sa
Non pas que je suis au courant. Pourtant, vous pouvez le faire vous-même assez lapidaire:
var obj = { a: 1, b: 2, c: 3 };
var arr = [];
for (var i in obj) {
var e = {};
e[i] = obj[i];
arr.push(e);
}
console.log(arr);
// Output: [Object { a=1 }, Object { b=2 }, Object { c=3 }]
Bien sûr, vous ne pouvez pas non plus alert
, vous pourriez tout aussi bien console.log(obj)
en premier lieu.
Vous pourrait tableaux de sortie de tableaux:
var obj = { a: 1, b: 2, c: 3 };
var arr = [];
for (var i in obj) {
arr.push([i, obj[i]]);
}
console.log(arr);
// Output: [["a", 1], ["b", 2], ["c", 3]]
alert(arr);
// Alert: a, 1, b, 2, c, 3
Mais, encore une fois, ew.
Puisque vous voulez alert
je suppose que ce n'est pas pour votre version de production, et cette ancienne compatibilité de navigateur n'est pas un problème.
Si tel est le cas, alors vous pouvez le faire:
var myHash = ......
alert(Object.keys(myHash).map(function(key) { return [key, myHash[key]]; }));
C'est assez mignon. –
Oh, oui il est: 'var myUsers = {};' ' myUsers [0] = { 'id': 'x', 'nom d'utilisateur': 'aaa'} \' n' myUsers [1 ] = {'id': 'y', 'nom d'utilisateur': 'bbb'} ' ' Object.keys (myUsers) .map (fonction (touche) {return myUsers [clé] .username;}) ' Merci ! – dirkk0
pour & rapide salissante dans alert
vous pouvez utiliser JSON
:
alert(JSON.stringify(yourObj).replace(/,/g,'\n'));
Voici ma version. Il devrait vous permettre d'aplatir entrée comme ci-dessous:
var input = {
a: 'asdf',
b: [1,2,3],
c: [[1,2],[3,4]],
d: {subA: [1,2]}
}
La fonction est comme ceci:
function flatten (input, output) {
if (isArray(input)) {
for(var index = 0, length = input.length; index < length; index++){
flatten(input[index], output);
}
}
else if (isObject(input)) {
for(var item in input){
if(input.hasOwnProperty(item)){
flatten(input[item], output);
}
}
}
else {
return output.push(input);
}
};
function isArray(obj) {
return Array.isArray(obj) || obj.toString() === '[object Array]';
}
function isObject(obj) {
return obj === Object(obj);
}
L'utilisation est quelque chose comme:
sortie var = []
aplatissent (entrée sortie);
La sortie doit alors être la matrice aplatie.
Peut-être un peu en retard, mais ici vous avez ma version de la réponse, mise à jour à ES2015. J'utilise une fonction récursive et il fonctionne même s'il y a d'autres objets à l'intérieur de l'objet principal:
function objectFlattener (object) {
return Reflect.apply(Array.prototype.concat, [], Object.keys(object).map(key => {
if (object[key] instanceof Object) {
return objectFlattener(object[key]);
}
return `${ key }: ${ object[key] }`;
}));
}
changer Ainsi, le dernier retour, vous pouvez formater l'élément dans votre tableau.
- 1. tableau Aplatir dans PowerShell
- 2. Tableau semi-Aplatir
- 3. Comment aplatir un tableau?
- 4. Aplatir un tableau PHP
- 5. Comment aplatir tableau le plus intérieur
- 6. Comment aplatir un tableau dans jQuery?
- 7. PHP: aplatir le tableau - le moyen le plus rapide?
- 8. Aplatir liste dans LINQ
- 9. Comment aplatir un tableau en PHP
- 10. Comment aplatir un tableau de tableaux en tableau?
- 11. Aplatir un PHP tableau imbriqué dans la chaîne hiérarchique représentations
- 12. lignes Aplatir dans SQL Server
- 13. Aplatir hachage avec deux noms de clés identiques (tableau)
- 14. comment aplatir tableau multidimensionnel contenant des objets en javascript
- 15. Comment aplatir un tableau associatif dans un tableau avec seulement des valeurs en PHP?
- 16. F # - Aplatir liste/plage
- 17. Comment aplatir hachage pour Redis
- 18. Comment aplatir un tableau en une chaîne de valeurs?
- 19. Aplatir un tableau PHP un niveau basé sur clé
- 20. Comment aplatir un tableau numérique de l'objet dtype
- 21. Aplatir Carte avec GSON
- 22. XSLT pour aplatir XML
- 23. Aplatir/fusion Liste LINQ
- 24. MYSQL - Aplatir Query Table
- 25. "Aplatir" CSS en HTML
- 26. aplatir liste Lisp
- 27. xstream aplatir un objet
- 28. Aplatir la fonction
- 29. comment paritally aplatir une liste dans clojure?
- 30. Comment développer (aplatir) une ligne dans datatable qui dans une des colonnes contient un tableau?
quel est le problème avec 'console.log' ou' console.dir'? – jAndy
Quel est le problème avec la console.bûche()? Pourquoi alerte? Il ne montre jamais assez d'informations de débogage. Les consoles des nouveaux navigateurs devraient afficher suffisamment d'informations si vous conservez votre variable. De plus, les tableaux JS sont des objets .. ou si vous voulez, les objets sont des tableaux associatifs. –
@ N.B .: JS 'Array's sont' Object's; et JS 'Object's modélisent le concept de" tableaux associatifs ", mais" tableaux associatifs "et" Array "sont des notions distinctes. Ne les confondons pas! La terminologie de l'OP est sur place. –