2009-11-11 20 views

Respuesta

54
var dataArray = new Array; 
for(var o in dataObject) { 
    dataArray.push(dataObject[o]); 
} 
+0

Asumo que quiere para preservar el ordenando, entonces esto no es lo suficientemente bueno. – SLaks

+10

¿Y qué es "ordenar" en su opinión? –

+11

Si no desea incluir propiedades del prototipo del objeto (no * debe * ser ninguno si es un objeto simple), puede filtrarlas marcando 'dataObject.hasOwnProperty (o)'. –

5

Asumiendo que su dataObject se define la forma en que ha especificado, esto se hace:

var dataArray = []; 
for (var key in dataObject) 
    dataArray.push(dataObject[key]); 

Y al final tener dataArray rellena con objetos internos.

+1

Esto tampoco hace lo que está pidiendo. – SLaks

+0

Por favor, apúntame a lo que no hace que estaba preguntando? –

+2

Él quiere los objetos en sí mismos, no sus nombres. – SLaks

15

con jQuery, puede hacerlo de esta manera -

var dataArray = $.map(dataObject,function(v){ 
    return v; 
}); 

Demo

65
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]}); 
+11

Esto es [mucho más lento] (http://jsperf.com/values-extraction) que la respuesta aceptada. – Qix

+1

@Qix: ¿Quieres decir ** más rápido **? – julien

+0

@julien No. No, en absoluto. Ni siquiera cerca. La respuesta aceptada es más rápida en todos los casos siempre. – Qix

20

Usando underscore:

var dataArray = _.values(dataObject); 
+1

subrayado? no reconocido aquí ... – Veverke

+13

@Veverke Underscore es una biblioteca de commons muy utilizada. – Qix

2

Tal vez un poco prolijo, pero robusto y rápido

var result = []; 
var keys = Object.keys(myObject); 
for (var i = 0, len = keys.length; i < len; i++) { 
    result.push(myObject[keys[i]]); 
} 
15

versión ES6:

var dataArray = Object.keys(dataObject).map(val => dataObject[val]); 
+0

Esto se llama flecha: http://caniuse.com/#search=arrow –

+0

Gracias @ChristianNilsson para recordar. Edité la respuesta. – Thoran

0

En caso de que utilice d3. que puede hacer d3.values(dataObject) que dará

enter image description here

3

[Resulta que mi respuesta es similar a @Anonymous, pero sigo mi respuesta aquí, ya que explica cómo llegué a mi respuesta].

El objeto original tiene TRES propiedades (es decir, 3 teclas y 3 valores). Esto sugiere que deberíamos usar Object.keys() para transformarlo en una matriz con 3 valores.

var dataArray = Object.keys(dataObject); 
// Gives: ["object1", "object2", "object3" ] 

Ahora tenemos 3 valores, pero no los 3 valores que buscamos. Entonces, esto sugiere que deberíamos usar Array.prototype.map().

var dataArray = Object.keys(dataObject).map(function(e) { return dataObject[e]; }); 
// Gives: [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}] 
2

ES2017:

var dataObject = { 
 
    object1: { 
 
     id: 1, 
 
     name: "Fred" 
 
    }, 
 
    object2: { 
 
     id: 2, 
 
     name: "Wilma" 
 
    }, 
 
    object3: { 
 
     id: 3, 
 
     name: "Pebbles" 
 
    } 
 
}; 
 

 
var valuesOnly = Object.values(dataObject); 
 

 
console.log(valuesOnly)

Cuestiones relacionadas