Meerdere waarden teruggeven in JavaScript?

Ik probeer twee waarden terug te geven in JavaScript. Is dat mogelijk?

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

Nee, maar je zou een array met je waarden kunnen teruggeven:

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

Dan kun je ze als volgt benaderen:

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

Met de nieuwste ECMAScript 6 syntax*, kun je de return waarde ook intuïtiever destructureren:

const [first, second] = getValues();

Als u "labels" op elk van de geretourneerde waarden wilt zetten (gemakkelijker te onderhouden), kunt u een object retourneren:

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

En om ze te benaderen:

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

Of met ES6 syntaxis:

const {first, second} = getValues();
  • Zie deze tabel voor browser compatibiliteit. In principe ondersteunen alle moderne browsers behalve IE deze syntaxis, maar u kunt ES6-code compileren tot IE-compatibele JavaScript tijdens het bouwen met tools zoals Babel.
Commentaren (5)

U kunt dit doen vanaf Javascript 1.7 met behulp van "destructuring assignments". Merk op dat deze niet beschikbaar zijn in oudere Javascript versies (dat wil zeggen - noch met ECMAScript 3e noch 5e edities).

Hiermee kun je aan 1+ variabelen tegelijk toewijzen:

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

// or

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

Je kunt ook object destructuring gecombineerd met property value shorthand gebruiken om de return values in een object een naam te geven en diegene eruit te pikken die je wilt:

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

En tussen haakjes, laat je niet misleiden door het feit dat ECMAScript je toestaat om return 1, 2, .... Wat daar werkelijk gebeurt is niet wat het lijkt. Een uitdrukking in return statement - 1, 2, 3 - is niets anders dan een komma operator toegepast op numerieke literalen (1 , 2, en 3) opeenvolgend, die uiteindelijk evalueert naar de waarde van de laatste uitdrukking - 3. Daarom is return 1, 2, 3 functioneel identiek aan niets meer dan return 3.

return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Commentaren (7)

Stuur gewoon een letterlijk object terug

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);
Commentaren (1)