2011-01-05 21 views
16

Mam obiektu:JavaScript, przekształcić obiekt w tablicy

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

Chcę utworzyć tablicę, która przechowuje wartości obiektu. Klucze (nazwy przycisków) można pominąć:

[24, 23, 33, 12, 31] 

Kolejność wartości nie jest ważna!

Jednym z rozwiązań (oczywiście) byłoby mają funkcję, która pobiera wartości i umieszcza je w tablicy:

var arr = valuesToArray(obj); 

będę akceptować taką funkcję jak odpowiedź. Byłbym jednak bardziej zadowolony, gdyby istniała funkcja API (ECMAScript, jQuery, specyficzna dla przeglądarki, ...), która mogłaby to zrobić. Czy jest coś takiego?

Odpowiedz

30

Oczywistym sposobem byłoby zrobić dla w pętli, jak @quixoto sugeruje, ale tylko dla przypomnienia, a ponieważ szukasz wbudowanym sposób można sparować nowy ECMAScript 5 metody Object.keys i Array.prototype.map, dostępnym na latest browsers:

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

ES5 wygląda jak zabawa, nie? – jAndy

+1

Nice :) Jest to prawdopodobnie tak mały, jak to tylko możliwe. –

+1

Albo nawet krócej w ES6: 'Object.keys (obj) .map (key => obj [key])' – Vexter

5

Nie ma wbudowanego sposobu na zrobienie tego w dowolnym miejscu. Oto, co sugerujesz i możesz "skrócić" do bardziej sprytnych wersji programowania funkcjonalnego w zależności od twojej biblioteki, ale wszystkie będą miały taką samą wydajność.

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

Spróbuj tego:

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

z jQuery można użyć każdą funkcję:

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

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

Publikowanie tego wyłącznie dla zabawy. Uratuj swoje pochwały. Nie polecam, żeby rzeczywiście był używany. ; O)

przykład:http://jsfiddle.net/WGpXX/

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

Technicznie prace w tym najprostszym przypadku.

+1

Idealnie! Dokładnie to, czego szukałem! ... żartuję :) –

1

Korzystanie podkreślenia lib spróbować:

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

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

to wynikiem jest [[ "Mike", 24], [ "Peter" 23]];

Więcej szczegółów na metodzie tutaj w parach: http://underscorejs.org/#pairs

Powiązane problemy