Szukam najlepszego sposobu „dodawania” wielu obiektów JavaScript (tablice asocjacyjne).
Na przykład, biorąc pod uwagę:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
jaki jest najlepszy sposób obliczenia:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Odpowiedzi:
ECMAscript 6 wprowadzono,
Object.assign()
aby osiągnąć to natywnie w Javascript.Dokumentacja MDN dotycząca Object. assign ()
Object.assign
jest obsługiwany w wielu nowoczesnych przeglądarkach, ale jeszcze nie we wszystkich. Użyj transpilera, takiego jak Babel i Traceur, aby wygenerować kompatybilny wstecz ES5 JavaScript.źródło
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
scalania tablicy obiektów jest użycie operatora spreadu:Object.assign( ...objects )
Możesz użyć jquery w
$.extend
ten sposób:źródło
d = $.extend({},a,b,c);
To powinno wystarczyć:
Wynik:
źródło
length
sprawdza rozmiaru tablicy przy każdym wywołaniu? Jestem tak przyzwyczajony do pisania,for (var i = 0, len = array.length; i < len; ++i)
że nie mogę sobie przypomnieć, dlaczego zacząłem to robić.ECMAScript 6 ma rozszerzoną składnię . A teraz możesz to zrobić:
źródło
Podkreślenie ma kilka metod, aby to zrobić;
1. _.extend (miejsce docelowe, * źródła)
Skopiuj wszystkie właściwości obiektów źródłowych do obiektu docelowego i zwróć obiekt docelowy .
Lub
2. _.defaults (obiekt, * domyślne)
Wypełnij niezdefiniowane właściwości obiektu wartościami z obiektów domyślnych i zwróć obiekt .
Lub
źródło
Dlaczego funkcja powinna być ograniczona do 3 argumentów? Sprawdź także
hasOwnProperty
.źródło
Płytkie klonowanie (z wyłączeniem prototypu) lub scalanie obiektów jest teraz możliwe przy użyciu krótszej składni niż Object. assign () .
Składnia spreadów dla literałów obiektowych została wprowadzona w ECMAScript 2018 ):
Operator Spread (...) jest obsługiwany w wielu nowoczesnych przeglądarkach, ale nie we wszystkich.
Dlatego zaleca się użycie transpilera, takiego jak Babel, do konwersji kodu ECMAScript 2015+ na wsteczną kompatybilną wersję JavaScript w obecnych i starszych przeglądarkach lub środowiskach.
Oto równoważny kod, który Babel wygeneruje dla Ciebie:
źródło
Uwaga: Istniejące właściwości w poprzednich obiektach zostaną nadpisane.
źródło
a === d
na końcu. To może być w porządku, a może nie.Jest to łatwe przy użyciu operatora rozszerzania ES7 dla obiektu, w konsoli przeglądarki
źródło
Aby scalić kilka dynamicznych obiektów, możemy skorzystać
Object.assign
ze składni spread .Powyższa funkcja akceptuje dowolną liczbę obiektów, łącząc wszystkie ich właściwości w nowy obiekt z właściwościami z późniejszych obiektów nadpisując te z poprzednich obiektów.
Próbny:
Pokaż fragment kodu
Aby połączyć tablicę obiektów, można zastosować podobną metodę.
Próbny:
Pokaż fragment kodu
źródło
Prawdopodobnie najszybszym, wydajnym i bardziej ogólnym sposobem jest to (możesz scalić dowolną liczbę obiektów, a nawet skopiować do pierwszego -> przypisz):
Pozwala także na modyfikację pierwszego obiektu, który jest przekazywany przez odniesienie. Jeśli nie chcesz tego, ale chcesz mieć zupełnie nowy obiekt zawierający wszystkie właściwości, możesz przekazać {} jako pierwszy argument.
Połączony_obiekt i obiekt1 zawierają właściwości obiekt1, obiekt2, obiekt3.
W tym przypadku połączony_obiekt zawiera właściwości obiektu1, obiekt2, obiekt3, ale obiekt1 nie jest modyfikowany.
Sprawdź tutaj: https://jsfiddle.net/ppwovxey/1/
Uwaga: obiekty JavaScript są przekazywane przez odniesienie.
źródło
ES6 ++
Pytanie jest dodawanie różnych różnych obiektów w jeden.
powiedzmy, że masz jeden obiekt z wieloma kluczami, które są obiektami:
to było rozwiązanie, które znalazłem (nadal muszę na zawsze: /)
W ten sposób możemy dynamicznie dodawać WSZYSTKIE klucze obiektów do jednego.
źródło
Najprostsze: operatory rozproszenia
źródło
źródło