Próbuję zwrócić dwie wartości w JavaScript . czy to możliwe?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
javascript
return
multiple-variable-return
Asim Zaidi
źródło
źródło
Odpowiedzi:
Nie, ale możesz zwrócić tablicę zawierającą twoje wartości:
Następnie możesz uzyskać do nich dostęp w następujący sposób:
Dzięki najnowszej składni ECMAScript 6 * możesz także bardziej intuicyjnie rozkładać wartość zwracaną:
Jeśli chcesz umieścić „etykiety” na każdej ze zwracanych wartości (łatwiejsze do utrzymania), możesz zwrócić obiekt:
I aby uzyskać do nich dostęp:
Lub ze składnią ES6:
* Zobacz tę tabelę w celu uzyskania zgodności przeglądarki. Zasadniczo wszystkie współczesne przeglądarki oprócz IE obsługują tę składnię, ale można skompilować kod ES6 do JavaScript kompatybilnego z IE podczas kompilacji za pomocą narzędzi takich jak Babel .
źródło
return {dCodes : dCodes, dCodes2 : dCodes2};
aby ułatwić odniesienie.const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
działa tak samo jak wspomniany @Intelekshual i (2) używając tej samej funkcji można po prostu uzyskać do nich dostęp za pomocą tablic destrukcyjnych[dCodes, dCodes2] = newCodes()
lub (3) obiektów({dCodes, dCodes2} = newCodes())
(nie trzeba tam używać deklaracji @Taylor , choćvar
bardziej pasuje do obecnego przykładu Sashy).Możesz to zrobić od wersji Javascript 1.7, używając „przypisań do restrukturyzacji” . Zauważ, że nie są one dostępne w starszych wersjach Javascript (co oznacza - ani w ECMAScript 3., ani 5. edycji).
Umożliwia przypisanie do 1+ zmiennych jednocześnie:
Możesz także użyć funkcji destrukcji obiektu w połączeniu ze skrótem wartości właściwości, aby nazwać zwracane wartości w obiekcie i wybrać te, które chcesz:
A tak przy okazji, nie dajcie się zwieść faktowi, że ECMAScript pozwala na to
return 1, 2, ...
. To, co się naprawdę dzieje, nie jest tym, co mogłoby się wydawać. Wyrażenie w instrukcji return -1, 2, 3
- to nic innego operatora przecinek stosowane do literałów liczbowych (1
,2
, i3
) sekwencyjnie, co ostatecznie ocenia do wartości jego ostatniej wypowiedzi -3
. Dlategoreturn 1, 2, 3
jest funkcjonalnie identyczny z niczym innym jakreturn 3
.źródło
function foo(){return 1,2,3;}
zrobienieconsole.log([].push(foo()))
wydruków 1.Zwróć dosłownie obiekt
źródło
Od ES6 możesz to zrobić
Zwracane wyrażenie
{dCodes, dCodes2}
jest skrótem wartości właściwości i jest równoważne z tym{dCodes: dCodes, dCodes2: dCodes2}
.To przypisanie w ostatnim wierszu nazywa się przypisaniem niszczenia obiektów . Wyodrębnia wartość właściwości obiektu i przypisuje ją do zmiennej o tej samej nazwie. Jeśli chcesz przypisać zwracane wartości do zmiennych o różnych nazwach, możesz to zrobić w ten sposób
let {dCodes: x, dCodes2: y} = newCodes()
źródło
Ecmascript 6 zawiera „przypisania do restrukturyzacji” (jak wspomniano w Kangax), więc we wszystkich przeglądarkach (nie tylko Firefox) będziesz w stanie przechwycić tablicę wartości bez konieczności tworzenia tablicy nazwanej lub obiektu wyłącznie w celu ich przechwycenia.
Możesz to wypróbować już w Firefoksie!
źródło
Inną wartą wspomnienia nowo wprowadzoną składnią (ES6) jest użycie skrótu tworzenia obiektu oprócz niszczenia przypisania.
Ta składnia może być wypełniana przez babel lub inny wypełniacz js dla starszych przeglądarek, ale na szczęście teraz działa natywnie z najnowszymi wersjami Chrome i Firefox.
Ale ponieważ tworzenie nowego obiektu wiąże się z alokacją pamięci (i ewentualnym ładowaniem gc), nie oczekuj od niej dużej wydajności. JavaScript i tak nie jest najlepszym językiem do tworzenia wysoce optymalnych rzeczy, ale jeśli jest to potrzebne, możesz rozważyć umieszczenie wyniku na otaczającym obiekcie lub takich technikach, które są zwykle częstymi sztuczkami związanymi z wydajnością między JavaScript, Java i innymi językami.
źródło
Najlepszym sposobem na to jest
Następnie użyj
zwrot 4
w ES6 możesz użyć tego kodu
źródło
Oprócz zwracania tablicy lub obiektu, jak zalecają inni, możesz również użyć funkcji kolekcjonerskiej (podobnej do tej znalezionej w The Little Schemer ):
Zrobiłem test jsperf, aby zobaczyć, która z trzech metod jest szybsza. Tablica jest najszybsza, a kolektor jest najwolniejszy.
http://jsperf.com/returning-multiple-values-2
źródło
collector
nazywa się to,continuation
a technika nazywa się CPSW JS możemy łatwo zwrócić krotkę z tablicą lub obiektem, ale nie zapomnij! => JS jest
callback
językiem zorientowanym i istnieje tutaj mały sekret „zwracania wielu wartości”, o których nikt jeszcze nie wspomniał, spróbuj tego:staje się
:)
bam! To po prostu inny sposób rozwiązania problemu.
źródło
Dodanie brakujących ważnych części, aby uczynić to pytanie kompletnym zasobem, ponieważ pojawia się w wynikach wyszukiwania.
Niszczenie obiektów
W przypadku destrukcji obiektów niekoniecznie musisz używać tej samej wartości klucza co nazwa zmiennej, możesz przypisać inną nazwę zmiennej, definiując ją jak poniżej:
Niszczenie tablic
W rozkładzie tablic możesz pominąć niepotrzebne wartości.
Warto zauważyć, że
...rest
zawsze powinno to być na końcu, ponieważ nie ma sensu niszczyć niczego po agregacji wszystkiego innegorest
.Mam nadzieję, że doda to pewnej wartości temu pytaniu :)
źródło
Możesz także:
źródło
Bardzo częstym sposobem zwracania wielu wartości w javascript jest użycie literałów obiektowych , więc coś takiego:
i uzyskaj takie wartości:
lub nawet w skrócie:
i zdobądź je indywidualnie:
źródło
Możesz użyć „Object”
źródło
Wszystko w porządku.
return
logicznie przetwarza od lewej do prawej i zwraca ostatnią wartość.źródło
,
jest operatora i mogą być stosowane w dowolnym ekspresji. Nie ma w tym nic specjalnegoreturn
.Sugerowałbym użycie najnowszego zadania destrukcji (ale upewnij się, że jest ono obsługiwane w twoim środowisku )
źródło
Znam dwa sposoby, aby to zrobić: 1. Wróć jako tablicę 2. Wróć jako obiekt
Oto przykład, który znalazłem:
źródło
Kilka dni temu miałem podobny wymóg uzyskania wielu zwracanych wartości z funkcji, którą utworzyłem.
Z wielu zwracanych wartości potrzebowałem, aby zwracała tylko określoną wartość dla danego warunku, a następnie inną wartość zwracaną odpowiadającą innemu warunkowi.
Oto przykład tego, jak to zrobiłem:
Funkcjonować:
Pobieranie wymaganej wartości zwracanej z obiektu zwróconego przez funkcję:
Istotą odpowiedzi na to pytanie jest podzielenie się podejściem polegającym na otrzymaniu Data w dobrym formacie. Mam nadzieję, że to ci pomogło :)
źródło
Nie dodam tu nic nowego, tylko inny alternatywny sposób.
źródło
Cóż, nie możemy dokładnie zrobić tego, co próbujesz. Ale można zrobić coś poniżej.
Następnie podczas wywoływania metody
źródło