2011-01-05 17 views
16

Tengo un objeto:JavaScript, objeto de transformación en una matriz

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

Quiero crear una matriz que contiene los valores del objeto. Las teclas (nombres clave) pueden pasarse por alto:

[24, 23, 33, 12, 31] 

El orden de los valores no es importante!

Una solución de (obviamente) sería ¿Tiene una función que toma los valores y las pone en una matriz:

var arr = valuesToArray(obj); 

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

Respuesta

30

La manera obvia sería hacer una, se podría asociar el bucle for-in, como @quixoto sugiere, pero sólo para el registro, y ya que usted está buscando un incorporada camino nuevo ECMAScript 5 métodos Object.keys y Array.prototype.map, disponibles en latest browsers:

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

ES5 parece divertido, ¿no? – jAndy

+1

Agradable :) Esto es probablemente tan pequeño como posiblemente pueda obtener. –

+1

O incluso más corto en ES6: 'Object.keys (obj) .map (clave => obj [clave])' – Vexter

5

No hay una forma incorporada de hacerlo en ninguna parte. Lo siguiente hace lo que sugiere, y puede "acortarse" en versiones de programación funcional más inteligentes dependiendo de su biblioteca, pero todas tendrán la misma eficacia.

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

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) 
0

Algunas bibliotecas tienen algo que hacer esto (como los "valores" de prototipos de función), pero en realidad son sólo las envolturas alrededor de una función que se repite una y devuelve el valores del objeto.

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

6

con jQuery que puede utilizar la función de cada uno:

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

myArray=new Array(); 
$.each(obj, function(key, value) { 
    myArray.push(value); 
}); 
2

Publicando esto estrictamente por diversión. Guarde sus votos bajos. No estoy recomendando que realmente sea utilizado. ; o)

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

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

Técnicamente obras en este caso sencillo.

+1

¡Perfecto! ¡Exactamente lo que estaba buscando! ... es una broma :) –

1

utilice el subrayado lib intento:

function valuesToArray(o) { 
    return _.pairs(o); 
} 

var obj = { 
    "Mike": 24, 
    "Peter": 23 
    //... 
    }, 
    result = valuesToArray(obj); 

A continuación, el resultado es [[ "Mike", 24], [ "Peter" , 23]];

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

Cuestiones relacionadas