1168 Stimmen

Mehrere Werte in JavaScript zurückgeben?

Ich versuche, zwei Werte zurückzugeben in JavaScript . Ist dies möglich?

var newCodes = function() {  
    var dCodes = fg.codecsCodes.rs;
    var dCodes2 = fg.codecsCodes2.rs;
    return dCodes, dCodes2;
};

1796voto

Sasha Chedygov Punkte 121566

Nein, aber Sie könnten ein Array mit Ihren Werten zurückgeben:

function getValues() {
    return [getFirstValue(), getSecondValue()];
}

Dann können Sie sie wie folgt aufrufen:

var values = getValues();
var first = values[0];
var second = values[1];

Mit der neuesten ECMAScript 6-Syntax * können Sie den Rückgabewert auch intuitiver destrukturieren:

const [first, second] = getValues();

Wenn Sie jeden der zurückgegebenen Werte mit "Etiketten" versehen wollen (leichter zu pflegen), können Sie ein Objekt zurückgeben:

function getValues() {
    return {
        first: getFirstValue(),
        second: getSecondValue(),
    };
}

Und um auf sie zuzugreifen:

var values = getValues();
var first = values.first;
var second = values.second;

Oder mit ES6-Syntax:

const {first, second} = getValues();

* Siehe diese Tabelle für die Browser-Kompatibilität. Grundsätzlich unterstützen alle modernen Browser außer dem IE diese Syntax, aber Sie können ES6-Code zur Erstellungszeit mit Tools wie Babel .

300voto

kangax Punkte 38303

Ab ECMAScript 6 können Sie dies mit Arrays und "Destrukturierung von Aufträgen" . Beachten Sie, dass diese in älteren Javascript-Versionen nicht verfügbar sind (d.h. weder mit ECMAScript 3rd noch 5th Edition).

Sie ermöglicht die gleichzeitige Zuweisung an 1+ Variablen:

var [x, y] = [1, 2];
x; // 1
y; // 2

// or

[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4

Sie können auch Folgendes verwenden Destrukturierung von Objekten in Kombination mit der Kurzschrift von Eigenschaftswerten um die Rückgabewerte in einem Objekt zu benennen und die gewünschten Werte auszuwählen:

let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3

Und übrigens, lassen Sie sich nicht von der Tatsache täuschen, dass ECMAScript Ihnen erlaubt return 1, 2, ... . Was dort wirklich passiert, ist nicht das, was man vermuten könnte. Ein Ausdruck in der Return-Anweisung - 1, 2, 3 - ist nichts anderes als ein Komma-Operator, der auf numerische Literale angewendet wird ( 1 , 2 y 3 ), die schließlich den Wert des letzten Ausdrucks auswertet - 3 . Deshalb return 1, 2, 3 ist funktionell identisch mit nichts anderem als return 3 .

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;

76voto

Sean Kinsey Punkte 36651

Geben Sie einfach ein Objektliteral zurück

function newCodes(){
    var dCodes = fg.codecsCodes.rs; // Linked ICDs  
    var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs       
    return {
        dCodes: dCodes, 
        dCodes2: dCodes2
    };  
}

var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);

58voto

Peracek Punkte 1571

Seit ES6 können Sie dies tun

let newCodes = function() {  
    const dCodes = fg.codecsCodes.rs
    const dCodes2 = fg.codecsCodes2.rs
    return {dCodes, dCodes2}
};

let {dCodes, dCodes2} = newCodes()

Ausdruck zurückgeben {dCodes, dCodes2} ist Eigenschaftswert Kurzschrift und ist gleichbedeutend mit {dCodes: dCodes, dCodes2: dCodes2} .

Diese Zuweisung in der letzten Zeile wird als Objekt zerstörende Zuordnung . Es extrahiert den Eigenschaftswert eines Objekts und weist ihn einer gleichnamigen Variablen zu. Wenn Sie die Rückgabewerte Variablen mit unterschiedlichen Namen zuweisen möchten, können Sie dies wie folgt tun let {dCodes: x, dCodes2: y} = newCodes()

27voto

user3015682 Punkte 1129

Ecmascript 6 enthält "destructuring Zuweisungen" (wie kangax erwähnt) so in allen Browsern (nicht nur Firefox) werden Sie in der Lage, ein Array von Werten zu erfassen, ohne ein benanntes Array oder Objekt für den alleinigen Zweck der Erfassung zu machen.

//so to capture from this function
function myfunction()
{
 var n=0;var s=1;var w=2;var e=3;
 return [n,s,w,e];
}

//instead of having to make a named array or object like this
var IexistJusttoCapture = new Array();
IexistJusttoCapture = myfunction();
north=IexistJusttoCapture[0];
south=IexistJusttoCapture[1];
west=IexistJusttoCapture[2];
east=IexistJusttoCapture[3];

//you'll be able to just do this
[north, south, west, east] = myfunction(); 

Sie können es bereits in Firefox ausprobieren!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X