Estoy usando un objeto como una tabla hash. Me gustaría imprimir rápidamente su contenido (por ejemplo, alert()
). ¿Hay algo incorporado para convertir un hash en matrices de pares (clave, valor)?¿Acoplar objeto a la matriz?
Respuesta
he actualizado esta un poco más. Esto es mucho más fácil de analizar que incluso console.log porque deja fuera el material adicional que está allí como __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
}
}
Lo único que haría para mejorar esto es que tenga una sangría correcta en función del nivel de recursión.
¿Por qué elegirías esto en 'console.log'? ¿Por qué está evitando las fantásticas opciones de depuración que su navegador ofrece para usted? –
¿Quién dijo que alguien estaba evitando 'console.log'? La pregunta era cómo aplanar los datos. 'alert()' solo se mencionó "por ejemplo". ¿Qué sucede si quiere enviarlo de vuelta a un servidor a través de Ajax para que se registre allí? –
Conozco 'console.log' y ciertamente es genial para la mayoría de mis necesidades de depuración. Sin embargo, a veces me resulta útil usar la alerta para saber exactamente cuándo sucede algo. El código que viene directamente después de una alerta no se ejecuta hasta que no acepte la alerta. En general, cuando no se desea este comportamiento, hay pocas razones para usar 'alert()'. –
Utilice el bucle for:
for (var x in yourObj)
{
alert(yourObj[x]);
}
de esa manera solo verías los valores. Bute incluso si concentreas las teclas también, alertaría muchas veces probablemente. Debe crear una cadena y alertar el resultado final. – jAndy
Bueno, esto es solo un ejemplo del bucle for, no una implementación completa de lo que quiere el operador. él debería poder descifrar el resto. – m0sa
No que yo sepa. Aún así, puede hacerlo por sí solo bastante concisa:
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 }]
Por supuesto, no se puede alert
esto tampoco, así que puede ser que también acaba de console.log(obj)
en el primer lugar.
Usted podía matrices de salida de matrices:
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
Pero, de nuevo, ew.
Como desea alert
a cabo Supongo que no es para su versión de producción, y que la compatibilidad del navegador anterior no es un problema.
Si este es el caso, entonces usted puede hacer esto:
var myHash = ......
alert(Object.keys(myHash).map(function(key) { return [key, myHash[key]]; }));
Esto es bastante dulce. –
Oh, sí lo es: 'myUsers var = {};' ' myUsers [0] = { 'id': 'nombre de usuario' 'x': 'AAA'} \ N' ' myUsers [1 ] = {'id': 'y', 'username': 'bbb'} ' ' Object.keys (myUsers) .map (function (key) {return myUsers [key] .username;}) ' Gracias ! – dirkk0
para una rápida & uso sucia en alert
podría utilizar JSON
:
alert(JSON.stringify(yourObj).replace(/,/g,'\n'));
aquí está mi versión de la misma. Se le debería permitir a aplanar la entrada como a continuación:
var input = {
a: 'asdf',
b: [1,2,3],
c: [[1,2],[3,4]],
d: {subA: [1,2]}
}
La función es la siguiente:
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);
}
uso es algo así como:
salida var = []
aplanar (de entrada y salida);
Luego, la salida debe ser la matriz aplanada.
Tal vez un poco tarde, pero aquí tienes mi versión de la respuesta, actualizada a ES2015. Yo uso una función recursiva y funciona incluso si hay otros objetos en el interior del objeto 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] }`;
}));
}
Así que el cambio de la última declaración puede dar formato al elemento dentro de la matriz.
- 1. Acoplar la lista de listas
- 2. Cuando las clases quieren acoplar
- 3. Haskell: Acoplar árbol binario
- 4. Añadir nuevo objeto a la matriz
- 5. Objeto C# para la matriz
- 6. Cómo acoplar mediante programación un nuevo elemento a DockPanel
- 7. Objeto Convertir Java [] Matriz a Vector
- 8. Objeto Serializable de Java a la matriz de bytes
- 9. pitón anexar a la matriz de objeto JSON
- 10. Convertir notación literal de objeto a la matriz
- 11. ¿Acoplar un árbol (lista de listas) con una sola declaración?
- 12. Cómo acoplar el diseño relativo al botón de la pantalla
- 13. Cómo evitar acoplar la Vista y el Controlador en Swing
- 14. Cómo acoplar Firebug en la ventana del navegador?
- 15. ¿Es posible acoplar la ventana "Buscar/Reemplazar" en Eclipse?
- 16. Cómo acoplar la barra de velocidad en Emacs?
- 17. agregando matriz al Objeto
- 18. PHP objeto como matriz
- 19. PHP: Eliminar objeto de la matriz
- 20. JSON.parse para la matriz del objeto
- 21. Obtener el índice del objeto en la matriz para buscar el objeto correspondiente en otra matriz
- 22. Objeto PHP o una matriz
- 23. json_decode a la matriz
- 24. Array2D a la matriz
- 25. Jackson deserializar objeto o matriz
- 26. cadena "matriz" a la matriz verdadera
- 27. cómo convertir una matriz multidimensional a objeto en php?
- 28. Convirtiendo cualquier objeto a una matriz de bytes en java
- 29. Agregar objeto vacío y matriz
- 30. ¿Cómo convierto una matriz bidimensional C# a un objeto JSON?
¿Qué pasa con 'console.log' o' console.dir'? – jAndy
¿Qué pasa con la consola.Iniciar sesión()? ¿Por qué alerta? Nunca muestra suficiente información de depuración. Las consolas de navegadores más nuevos deben mostrar suficiente información si console.log su variable. Además, las matrices JS son objetos ... o, si se quiere, los objetos son matrices asociativas. –
@ N.B .: JS 'Array's son' Object's; y JS 'Object's modelan el concepto de" arrays asociativos ", pero" arrays asociativos "y" Array "son nociones distintas. No confundamos! La terminología del OP es acertada. –