Retourneer meerdere waarden in JavaScript?

Ik probeer twee waarden in javascript te retourneren. Is dit mogelijk?

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

Antwoord 1, Autoriteit 100%

Nee, maar u kunt een array retourneren met uw waarden:

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

Dan heb je toegang tot ze zoals SO:

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

Met de nieuwste ecmascript 6 syntaxis *, u kunt ook de retourwaarde intuïtiever vernietigen:

const [first, second] = getValues();

Als u “Labels” op elk van de geretourneerde waarden wilt plaatsen (gemakkelijker te onderhouden), kunt u een object retourneren:

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

en om ze te openen:

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

of met ESS6-syntaxis:

const {first, second} = getValues();

* Zie deze tabelvoor browsercompatibiliteit. In principe ondersteunen alle moderne browsers behalve IE deze syntaxis, maar je kunt ES6-code compileren tot IE-compatibel JavaScript tijdens het bouwen met tools zoals Babel.


Antwoord 2, autoriteit 18%

U kunt dit vanaf ECMAScript 6 doen met behulp van arrays en “vernietigingsopdrachten”. Merk op dat deze niet beschikbaar zijn in oudere Javascript-versies (d.w.z. — noch met ECMAScript 3e of 5e edities).

Hiermee kunt u tegelijkertijd aan 1+ variabelen toewijzen:

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

U kunt ook object destructuring gebruiken in combinatie met steno voor eigenschapswaardenom de retourwaarden in een object een naam te geven en de gewenste uit te kiezen:

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

Laat u trouwens niet misleiden door het feit dat u met ECMAScript return 1, 2, ...kunt retourneren. Wat daar werkelijk gebeurt, is niet wat het lijkt. Een expressie in return-statement — 1, 2, 3— is niets anders dan een komma-operator die wordt toegepast op numerieke letterlijke waarden (1, 2en 3) opeenvolgend, wat uiteindelijk evalueert tot de waarde van zijn laatste uitdrukking — 3. Daarom is return 1, 2, 3functioneel identiek aan niets meer dan return 3.

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

Antwoord 3, autoriteit 5%

Retourneer gewoon een object letterlijk

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);

Antwoord 4, autoriteit 3%

Sinds ES6 kun je dit doen

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

Retourexpressie {dCodes, dCodes2}is eigenschapswaarde afkortingen komt overeen met deze {dCodes: dCodes, dCodes2: dCodes2}.

Deze toewijzing op de laatste regel wordt objectvernietigende toewijzinggenoemd. Het extraheert de eigenschapswaarde van een object en wijst het toe aan een variabele met dezelfde naam. Als u retourwaarden wilt toewijzen aan variabelen met een andere naam, kunt u dat als volgt doen let {dCodes: x, dCodes2: y} = newCodes()


Antwoord 5, autoriteit 2%

Ecmascript 6 bevat “destructuring-toewijzingen” (zoals kangax al zei), dus in alle browsers (niet alleen Firefox) kunt u een reeks waarden vastleggen zonder dat u een benoemde reeks of object hoeft te maken met als enig doel het vastleggen hen.

//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(); 

Je kunt het al uitproberen in Firefox!


Antwoord 6, autoriteit 2%

Een andere vermeldenswaardige nieuw geïntroduceerde (ES6) syntaxis is het gebruik van steno voor het maken van objecten naast de vernietigingsopdracht.

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);

Deze syntaxis kan worden ingevuld met babel of een andere js-polyfiller voor oudere browsers, maar werkt gelukkig nu native met de recente versies van Chrome en Firefox.

Maar aangezien het maken van een nieuw object, geheugentoewijzing (en eventuele gc-belasting) hier betrokken zijn, verwacht er niet veel prestaties van. JavaScript is sowieso niet de beste taal voor het ontwikkelen van zeer optimale dingen, maar als dat nodig is, kun je overwegen om je resultaat op een omliggend object of dergelijke technieken te plaatsen, die meestal veelvoorkomende prestatietrucs zijn tussen JavaScript, Java en andere talen.


Antwoord 7

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

Gebruik vervolgens

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

In nieuwe versie:

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

Antwoord 8

Anders dan het retourneren van een array of een object zoals anderen hebben aanbevolen, kunt u ook een verzamelfunctie gebruiken (vergelijkbaar met die in The Little Schemer):

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

Ik heb een jsperf-test gedaan om te zien welke van de drie methoden sneller is. Array is het snelst en verzamelaar is het langzaamst.

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


Antwoord 9

In JS kunnen we gemakkelijk een tuple retourneren met een array of object, maar vergeet dit niet! => JS is een callback-georiënteerde taal, en er is hier een klein geheim voor het “retourneren van meerdere waarden” die nog niemand heeft genoemd, probeer dit:

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

wordt

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

🙂

Bam! Dit is gewoon een andere manier om uw probleem op te lossen.


Antwoord 10

Een veelgebruikte manier om meerdere waarden te retournerenin javascript is het gebruik van een objectletterlijk, dus zoiets als:

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

en krijg de waarden als volgt:

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

of zelfs een kortere manier:

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

en krijg ze afzonderlijk zoals:

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

Antwoord 11

U kunt ook het volgende doen:

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

Antwoord 12

De ontbrekende belangrijke onderdelen toevoegen om van deze vraag een complete hulpbron te maken, zoals deze in de zoekresultaten naar voren komt.

Objectvernietiging

Bij het vernietigen van objecten hoeft u niet per se dezelfde sleutelwaarde te gebruiken als uw variabelenaam, u kunt een andere variabelenaam toewijzen door deze als volgt te definiëren:

const newCodes = () => {  
    let dCodes = fg.codecsCodes.rs;
    let dCodes2 = fg.codecsCodes2.rs;
    return { dCodes, dCodes2 };
};
//destructuring
let { dCodes: code1, dCodes2: code2 } = newCodes();
//now it can be accessed by code1 & code2
console.log(code1, code2);

Array-destructie

Bij destructie van arrays kunt u de waarden overslaan die u niet nodig heeft.

const newCodes = () => {  
    //...
    return [ dCodes, dCodes2, dCodes3 ];
};
let [ code1, code2 ] = newCodes(); //first two items
let [ code1, ,code3 ] = newCodes(); //skip middle item, get first & last
let [ ,, code3 ] = newCodes(); //skip first two items, get last
let [ code1, ...rest ] = newCodes(); //first item, and others as an array

Het is de moeite waard om op te merken dat ...restaltijd aan het einde moet staan, omdat het geen zin heeft om iets te vernietigen nadat al het andere is samengevoegd tot rest.

Ik hoop dat dit wat waarde toevoegt aan deze vraag 🙂


Antwoord 13

U kunt “Object” gebruiken

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

Antwoord 14

Alles klopt. returnverwerkt logisch van links naar rechts en retourneert de laatste waarde.

function foo(){
    return 1,2,3;
}
>> foo()
>> 3

Antwoord 15

Ik zou willen voorstellen om de nieuwste destructuring opdrachtte gebruiken (maar zorg ervoor dat het wordt ondersteund in uw omgeving)

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

Antwoord 16

Ik ken twee manieren om dit te doen:
1. Retourneer als array
2. Terugkeren als object

Hier is een voorbeeld dat ik heb gevonden:

<script>
// Defining function
function divideNumbers(dividend, divisor){
    var quotient = dividend / divisor;
    var arr = [dividend, divisor, quotient];
    return arr;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all[0]); // 0utputs: 10
alert(all[1]); // 0utputs: 2
alert(all[2]); // 0utputs: 5
</script>
<script>
// Defining function
function divideNumbers(dividend, divisor){
    var quotient = dividend / divisor;
    var obj = {
        dividend: dividend,
        divisor: divisor,
        quotient: quotient
    };
    return obj;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all.dividend); // 0utputs: 10
alert(all.divisor); // 0utputs: 2
alert(all.quotient); // 0utputs: 5
</script>

Antwoord 17

Enkele dagen geleden had ik dezelfde eis om meerdere retourwaarden te krijgen van een functie die ik heb gemaakt.

Van veel retourwaarden had ik het nodig om alleen een specifieke waarde voor een bepaalde voorwaarde te retourneren en vervolgens een andere retourwaarde die overeenkomt met een andere voorwaarde.


Hier is het voorbeeld van hoe ik dat deed:

Functie:

function myTodayDate(){
    var today = new Date();
    var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
    var month = ["January","February","March","April","May","June","July","August","September","October","November","December"];
    var myTodayObj = 
    {
        myDate : today.getDate(),
        myDay : day[today.getDay()],
        myMonth : month[today.getMonth()],
        year : today.getFullYear()
    }
    return myTodayObj;
}

Vereiste retourwaarde verkrijgen van object geretourneerd door functie:

var todayDate = myTodayDate().myDate;
var todayDay = myTodayDate().myDay;
var todayMonth = myTodayDate().myMonth;
var todayYear = myTodayDate().year;

Het hele punt van het beantwoorden van deze vraag is om deze benadering te delen om Date in een goed formaat te krijgen. Ik hoop dat het je heeft geholpen 🙂


Antwoord 18

Ik voeg hier niets nieuws toe, maar een andere alternatieve manier.

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

Antwoord 19

Nou, we kunnen niet precies doen wat je probeert. Maar iets waar dat hieronder is, kan worden gedaan.

function multiReturnValues(){
    return {x:10,y:20};
}

Dan bij het bellen van de methode

const {x,y} = multiReturnValues();
console.log(x) ---> 10
console.log(y) ---> 20

Antwoord 20

Het is mogelijk om een ​​tekenreeks te retourneren met vele waarden en variabelen met behulp van de sjabloonletteres` $ {} `

Zoals:

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

Het is kort en eenvoudig.

Other episodes