2009-11-11 5 views

Odpowiedz

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

Zakładam, że chce zachować zamawianie, więc to nie wystarczy. – SLaks

+10

Co to jest "zamówienie" według Ciebie? –

+11

Jeśli nie chcesz dodawać właściwości z prototypu obiektu (tam * nie powinno * być żadnych, jeśli jest to zwykły obiekt), możesz je filtrować, zaznaczając opcję 'dataObject.hasOwnProperty (o)'. –

5

Zakładając, że DataObject definiuje sposób określony, to zrobić:

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

i kończy się po DataArray wypełniane wewnętrznych obiektów.

+1

To także nie robi tego, o co prosił. – SLaks

+0

Proszę, powiedz mi, czego nie robi, o co prosił? –

+2

Chce obiektów, nie ich imion. – SLaks

15

z jQuery, można zrobić to w ten sposób -

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

Demo

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

To jest [o wiele wolniej] (http://jsperf.com/values-extraction) niż zaakceptowana odpowiedź. – Qix

+1

@ Qix: Masz na myśli tyle ** szybciej **? – julien

+0

@julien Nr Wcale nie. Nawet nie blisko. Zaakceptowana odpowiedź jest zawsze szybsza w każdym przypadku. – Qix

20

Korzystanie underscore:

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

podkreślenie? nierozpoznany tutaj ... – Veverke

+13

@ Veverke Underscore to bardzo popularna biblioteka wspólna. – Qix

2

Może nieco rozwlekły, ale solidna i szybka

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

wersja ES6:

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

To się nazywa strzałka: http://caniuse.com/#search=arrow –

+0

Dzięki @ChristianNilsson za przypomnienie. Zmieniłem odpowiedź. – Thoran

0

W przypadku korzystania D3. można zrobić d3.values(dataObject) które dadzą

enter image description here

3

[Okazuje się, że moja odpowiedź jest podobna do @Anonymous, ale trzymam moją odpowiedź tutaj, ponieważ wyjaśnia, w jaki sposób mam moją odpowiedź].

Oryginalny obiekt ma TRZY właściwości (tj. 3 klucze i 3 wartości). Sugeruje to, że powinniśmy używać Object.keys(), aby przekształcić ją w tablicę z 3 wartościami.

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

Mamy teraz 3 wartości, ale nie 3 wartości, których szukamy. To sugeruje, że powinniśmy użyć 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)