Sto usando un oggetto come tabella hash. Mi piacerebbe stampare rapidamente i suoi contenuti (per alert()
per esempio). C'è qualcosa di integrato per convertire un hash in matrici di coppie (chiave, valore)?Appiattisci oggetto su matrice?
risposta
ho aggiornato questo un po 'di più. Questo è molto più semplice da analizzare rispetto a console.log perché lascia fuori le cose extra che sono lì come __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
}
}
L'unica cosa che vorrei fare per migliorare questo è l'hanno rientrare correttamente in base al livello di ricorsione.
Perché dovresti scegliere questo su 'console.log'? Perché stai evitando le fantastiche opzioni di debug offerte dal tuo browser? –
Chi ha detto che qualcuno stava evitando 'console.log'? La domanda era come appiattire i dati. 'alert()' è stato citato solo "per esempio". Cosa succede se vuole inviarlo a un server tramite Ajax per essere registrato lì? –
Sono a conoscenza di 'console.log' ed è sicuramente ottimo per la maggior parte delle mie esigenze di debug. Tuttavia a volte trovo utile usare l'avviso per scoprire esattamente quando succede qualcosa. Il codice che arriva direttamente dopo un avviso non viene eseguito fino a quando non si avverte l'avviso. Generalmente quando questo comportamento non è desiderato ci sono pochi motivi per usare 'alert()'. –
Utilizzare il ciclo for:
for (var x in yourObj)
{
alert(yourObj[x]);
}
in questo modo vedresti solo i valori. Buto anche se si concentenano anche i tasti, questo avverrebbe molte volte probabilmente. Dovresti creare una stringa e avvisare l'output finale. – jAndy
beh questo è solo un esempio del ciclo for, non un'implementazione completa di ciò che l'op vuole. dovrebbe essere in grado di capire il resto. – m0sa
Non che io sappia. Ancora, si può fare da soli piuttosto conciso:
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 }]
Naturalmente, non si può alert
questa operazione, così si potrebbe anche semplicemente console.log(obj)
in primo luogo.
È potrebbe array di uscita di array:
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
Ma, ancora una volta, ew.
Dal momento che si desidera alert
presumo che non è per la versione di produzione, e che la vecchia compatibilità del browser non è un problema.
Se questo è il caso, allora si può fare questo:
var myHash = ......
alert(Object.keys(myHash).map(function(key) { return [key, myHash[key]]; }));
Questo è piuttosto dolce. –
Oh, sì, è: 'var myUsers = {};' ' myUsers [0] = { 'id': 'x', 'username': 'aaa'} \ n' ' myUsers [1 ] = {'id': 'y', 'username': 'bbb'} ' ' Object.keys (myUsers) .map (function (key) {return myUsers [key] .username;}) ' Grazie ! – dirkk0
per un rapido utilizzo & sporco in alert
si potrebbe usare JSON
:
alert(JSON.stringify(yourObj).replace(/,/g,'\n'));
Qui è la mia versione di esso. Esso dovrebbe consentire di appiattire ingresso come di seguito:
var input = {
a: 'asdf',
b: [1,2,3],
c: [[1,2],[3,4]],
d: {subA: [1,2]}
}
La funzione è simile a questo:
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);
}
Usage è qualcosa di simile:
uscita var = []
appiattire (input Output);
Quindi l'output deve essere l'array appiattito.
Forse un po 'in ritardo, ma qui avete la mia versione della risposta, aggiornata a ES2015. Io uso una funzione ricorsiva e funziona anche se ci sono altri oggetti all'interno dell'oggetto principale:
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] }`;
}));
}
Così modificato l'ultima di ritorno è possibile formattare l'elemento all'interno dell'array.
- 1. Appiattisci un oggetto json nidificato
- 2. Appiattisci una matrice di array in Swift
- 3. appiattisci elenco/oggetto basato su record in dataframe
- 4. oggetto matrice statica
- 5. Appiattisci una lista di liste
- 6. Appiattisci un codec arbitrariamente annidato?
- 7. Clojure - Appiattisci ricorsivamente mappe nidificate
- 8. Converti matrice nidificata in oggetto
- 9. Appiattisci/denormalizza il risultato della funzione di aggregazione R
- 10. Rimuovere matrice da JavaScript oggetto
- 11. Ottieni oggetto casuale dalla matrice
- 12. json_encode sparse PHP matrice come JSON matrice, non JSON oggetto
- 13. Appiattisci una serie di stringhe in Ruby
- 14. Appiattisci una mappa dell'opzione per mappare
- 15. Stampa di una matrice di array su una riga nella console (una riga per oggetto matrice matrice) in Ruby
- 16. Codifica oggetto su JSON
- 17. Risagoma matrice 3d su matrice 2d
- 18. Applicazione funzione su matrice/riga matrice numpy
- 19. Ordinare una matrice basata su un'altra matrice
- 20. gluLookAt() migliore utilizzo, su matrice GL_PROJECTION o su matrice GL_MODELVIEW
- 21. Gruppo elementi di matrice utilizzando oggetto
- 22. Oggetto jQuery come matrice: $ ('# id') [0];
- 23. Appiattire matrice con oggetti in oggetto 1
- 24. Java Converti oggetto [] matrice in vettore
- 25. Rubino ottenere le chiavi oggetto come matrice
- 26. pitone aggiungere alla matrice in oggetto json
- 27. TypeScript aggiungi Oggetto alla matrice con push
- 28. JavaScript, oggetto di trasformazione in una matrice
- 29. Matrice all'interno di un oggetto Javascript?
- 30. Come convertire oggetto DOMNodeList in una matrice
Cosa c'è di sbagliato in 'console.log' o' console.dir'? – jAndy
Cosa c'è di sbagliato con la console.log()? Perché avvisare? Non mostra mai abbastanza informazioni di debug. Le console dei browser più recenti dovrebbero visualizzare informazioni sufficienti se console.log la tua variabile. Inoltre, gli array JS sono oggetti .. o se lo vorrai, gli oggetti sono array associativi. –
@ N.B .: JS 'Array's sono' Object's; e JS 'Object's modella il concetto di" array associativi ", ma" array associativi "e' Array's sono nozioni distinte. Non confondiamoli! La terminologia dell'OP è azzeccata. –