1228 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;
};

25voto

Ebrahim Byagowi Punkte 8964

Eine weitere erwähnenswerte, neu eingeführte (ES6) Syntax ist die Verwendung von Objekterzeugungskurzzeichen zusätzlich zur destruktiven Zuweisung.

function fun1() {
  var x = 'a';
  var y = 'b';
  return { x, y, z: 'c' };
  // literally means { x: x, y: y, z: 'c' };
}

var { z, x, y } = fun1(); // order or full presence is not really important
// literally means var r = fun1(), x = r.x, y = r.y, z = r.z;
console.log(x, y, z);

Diese Syntax kann mit Babel oder einem anderen js-Polyfiller für ältere Browser ausgefüllt werden, aber glücklicherweise funktioniert sie jetzt nativ mit den aktuellen Versionen von Chrome und Firefox.

Da aber die Erstellung eines neuen Objekts, die Speicherzuweisung (und eventuell das Laden von gc) hier involviert sind, sollte man nicht viel Leistung davon erwarten. JavaScript ist nicht die beste Sprache für die Entwicklung hoch optimaler Dinge sowieso, aber wenn das erforderlich ist, können Sie erwägen, setzen Sie Ihr Ergebnis auf umgebende Objekt oder solche Techniken, die in der Regel gemeinsame Leistung Tricks zwischen JavaScript, Java und anderen Sprachen sind.

23voto

Behnam Mohammadi Punkte 5748
function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d: d, c: c, f: f};
}

Dann verwenden Sie

const {d, c, f} = a();

In der neuen Version:

function a(){
  var d = 2;
  var c = 3;
  var f = 4;
  return {d, c, f}
}

13voto

Alireza Punkte 92209

Eine sehr verbreitete Methode zur mehrere Werte zurückgeben in Javascript ist die Verwendung eines Objektliterale also so etwas wie:

const myFunction = () => {
  const firstName = "Alireza", 
        familyName = "Dezfoolian",
        age = 35;
  return { firstName, familyName, age};
}

und erhalten die Werte wie folgt:

myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age

oder sogar einen kürzeren Weg:

const {firstName, familyName, age} = myFunction();

und erhalten sie individuell wie:

firstName; //Alireza
familyName; //Dezfoolian
age; //35

9voto

Zelenova Punkte 256

Anstatt ein Array oder ein Objekt zurückzugeben, wie es andere empfohlen haben, können Sie auch eine Collector-Funktion verwenden (ähnlich der in Der kleine Betrüger ):

function a(collector){
  collector(12,13);
}

var x,y;
a(function(a,b){
  x=a;
  y=b;
});

Ich habe einen jsperf-Test durchgeführt, um zu sehen, welche der drei Methoden schneller ist. Array ist am schnellsten und Collector ist am langsamsten.

http://jsperf.com/returning-multiple-values-2

7voto

Alexander Mills Punkte 76733

In JS können wir einfach ein Tupel mit einem Array oder Objekt zurückgeben, aber vergessen Sie nicht! => JS ist ein callback orientierten Sprache, und es gibt hier ein kleines Geheimnis für die "Rückgabe mehrerer Werte", das noch niemand erwähnt hat, versuchen Sie dies:

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

wird

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

:)

Das ist einfach eine andere Art, Ihr Problem zu lösen.

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