usa samsonite luggage carry backpack javascript jquery

samsonite - JavaScript, transformar objeto en matriz



samsonite outlet (9)

Tengo un objeto:

var obj = { "Mike": 24, "Peter": 23, "Simon": 33, "Tom": 12, "Frank": 31 };

Quiero crear una matriz que contenga los valores del objeto. Las claves (nombres de clave) pueden ser ignoradas:

[24, 23, 33, 12, 31]

¡El orden de los valores NO es importante!

Una solución (obviamente) sería tener una función que tome los valores y los coloque en una matriz:

var arr = valuesToArray(obj);

Aceptaré tal función como la respuesta. Sin embargo, me gustaría más si hubiera una función de API (ECMAScript, jQuery, específica del navegador, ...) que pudiera hacer esto. ¿Hay tal cosa?


Algunas bibliotecas tienen algo para hacer esto (como la función de "valores" del prototipo), pero en realidad son solo envolturas alrededor de una función que recorre y devuelve los valores del objeto.

http://www.prototypejs.org/api/object/values


Con jQuery puedes usar cada función:

var obj = { "Mike": 24, "Peter": 23, "Simon": 33, "Tom": 12, "Frank": 31 } myArray=new Array(); $.each(obj, function(key, value) { myArray.push(value); });


La forma obvia sería hacer un bucle for-in, como sugiere @quixoto , pero solo para el registro, y dado que está buscando un modo integrado , puede emparejar los nuevos métodos Object.keys y Array.prototype.map ECMAScript 5 Array.prototype.map , disponible en los últimos navegadores :

function valuesToArray(obj) { return Object.keys(obj).map(function (key) { return obj[key]; }); }


No hay una forma integrada de hacer esto en cualquier lugar. Lo siguiente hace lo que sugiere, y puede ser "reducido" a versiones de programación funcional más inteligentes dependiendo de su biblioteca, pero todas tendrán la misma eficiencia.

function valuesToArray(obj) { var result = []; for (var key in obj) { if (obj.hasOwnProperty(key)) { result.push(obj[key]); } } return result; }


Prueba esto:

var obj = { "Mike": 24, "Peter": 23, "Simon": 33, "Tom": 12, "Frank": 31 } ; var arr = [] for(var a in obj) { var val = obj[a]; arr.push(val); } alert(arr.length)


Publicar esto estrictamente por diversión. Guarda tus votos abajo. No estoy recomendando que se utilice. ; o)

Ejemplo: http://jsfiddle.net/WGpXX/

var arr = eval( ''['' + JSON.stringify(obj) .slice(1,-1) .replace(/"[^"]+":/g,'''') + '']'');

Funciona técnicamente en este sencillo caso.


Usando bob.js esto se puede hacer de manera bastante simple:

function valuesToArray(obj) { return bob.collections.extensions.toArray.call(obj); }


Usando el lib del guión bajo prueba:

function valuesToArray(o) { return _.pairs(o); } var obj = { "Mike": 24, "Peter": 23 //... }, result = valuesToArray(obj);

Entonces el resultado es [["Mike", 24], ["Peter", 23]];

Más detalles sobre el método de pares aquí: http://underscorejs.org/#pairs


Utilice Object.values que devolverá la matriz.

Object.values(obj) // [24, 23, 33, 12, 31]