Moja aplikacja tworzy obiekt JavaScript, taki jak:
myObj= {1:[Array-Data], 2:[Array-Data]}
Ale potrzebuję tego obiektu jako tablicy.
array[1]:[Array-Data]
array[2]:[Array-Data]
Próbowałem więc przekonwertować ten obiekt na tablicę, wykonując iterację z $.each
obiektem i dodając element do tablicy:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Czy istnieje lepszy sposób przekonwertowania obiektu na tablicę lub funkcję?
javascript
jquery
arrays
object
The Bndr
źródło
źródło
myObj= {1:[Array-Data]
namyObj= {0:[Array-Data]
nie była częścią twojej edycji (jak dobrze pamiętam)Odpowiedzi:
Wynik:
źródło
$.map
? Każde wyszukiwanie, które próbuję w tym celu, powoduje wyświetlenie wielu linków do jQuery lub metody tablic map.value.key = index; return [value];
zamiastreturn [value];
Jeśli szukasz funkcjonalnego podejścia:
Prowadzi do:
To samo z funkcją strzałki ES6:
Z ES7 będziesz mógł
Object.values
zamiast tego korzystać ( więcej informacji ):Lub jeśli już używasz Underscore / Lo-Dash:
źródło
Myślę, że możesz użyć,
for in
ale sprawdzam, czy właściwość nie jest odziedziczonaEDYCJA - jeśli chcesz, możesz również zachować indeksy swojego obiektu, ale musisz sprawdzić, czy są one numeryczne (i otrzymujesz niezdefiniowane wartości dla brakujących indeksów:
źródło
$.map
spłaszczy sięArray-Data
.[{1:[Array-Data], 2:[Array-Data]}]
I$.map()
również nie wygląda na udany. Wygląda na to, że wszystkie dane Sub-Array są scalone w jedną tablicę.array.length
powinien zwrócić 2 (ponieważ istnieją 2 elementy), ale zwraca 67, co jest liczbą wszystkich elementów we wszystkich [„Array-Data”].arr[+i] = myObj[i];
ponieważ (i)for(...in...)
nie ma gwarancji, że zwróci właściwości w dowolnej kolejności (ii) w przykładzie OP właściwości zaczynają się od 1, a nie 0.Po prostu zrób
To wszystko!
źródło
Jeśli znasz maksymalny indeks w swoim obiekcie, możesz wykonać następujące czynności:
źródło
myObj.length = Object.keys(myObj).length
Ponieważ ES5 Object.keys () zwraca tablicę zawierającą właściwości zdefiniowane bezpośrednio na obiekcie (z wyłączeniem właściwości zdefiniowanych w łańcuchu prototypów):
ES6 idzie o krok dalej dzięki funkcjom strzałek:
źródło
Obecnie istnieje prosty sposób: Object.values () .
Wynik:
Nie wymaga to jQuery, zostało zdefiniowane w ECMAScript 2017.
Jest obsługiwany przez każdą nowoczesną przeglądarkę (zapomnij o IE).
źródło
var state = { ingredient: { salad: 1, bacon: 1, } }
, a następnievar HariOm = Object.values(state);
następnieconsole.log(typeof HariOM)
wyświetla typem obiektu. Czy nie powinien wyświetlać go jako tablica?Array.isArray(HariOM)
Najlepszą metodą byłoby użycie funkcji wyłącznie javascript:
źródło
var myObj = {1:[1,2,3],2:[4,5,6]};
źródło
var bbb = {'1': 'a', '3': 'b'}; var x = []; for (var i in bbb) { x[parseInt(i)] = bbb[i];} console.log(x);
ECMASCRIPT 5:
ECMASCRIPT 2015 lub ES6:
źródło
Co powiesz na
jQuery.makeArray(obj)
Tak to zrobiłem w mojej aplikacji.
źródło
Rozwiązanie jest bardzo proste
źródło
Sposób na ES8 jest prosty :
Oficjalna dokumentacja
źródło
Fiddle Demo
Rozszerzenie odpowiedzi bjornd .
Odniesienie
Array.prototype.slice ()
Function.prototype.apply ()
Object.prototype.hasOwnProperty ()
Object.keys ()
źródło
Jeśli chcesz zachować nazwy właściwości obiektu jako wartości. Przykład:
Zastosowanie
Object.keys()
,Array.map()
aObject.assign()
:Wynik:
Wyjaśnienie:
Object.keys()
wylicza wszystkie właściwości źródła;.map()
stosuje=>
funkcję do każdej właściwości i zwraca tablicę;Object.assign()
scala nazwę i wartość dla każdej właściwości.źródło
Zrobiłem niestandardową funkcję:
źródło
Po kilku testach, oto ogólny konwerter obiektów na tablicę:
Masz obiekt:
Funkcja:
Zastosowanie funkcji:
Dostajesz:
Dzięki temu możesz uzyskać dostęp do wszystkich kluczy i wartości, takich jak:
Wynik w konsoli:
Edytować:
Lub w formie prototypowej:
A następnie użyj takich jak:
źródło
Możesz stworzyć prostą funkcję do konwersji z
object
naarray
, coś takiego może wykonać zadanie za pomocą czystego javascript:albo ten:
i zadzwoń i użyj funkcji jak poniżej:
Również w przyszłości będziemy mieć coś o nazwie
Object.values(obj)
podobnej,Object.keys(obj)
co zwróci wszystkie właściwości jako tablicę, ale nie jest jeszcze obsługiwane w wielu przeglądarkach ...źródło