operator - javascript pdf




Restituisce più valori in JavaScript? (10)

Basta restituire un oggetto letterale

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

Sto cercando di restituire due valori in JavaScript. È possibile?

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

Dal momento che ES6 puoi farlo

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

let {dCodes, dCodes2} = newCodes()

L'espressione return {dCodes, dCodes2} è una proprietà shorthand del valore della proprietà ed è equivalente a questo {dCodes: dCodes, dCodes2: dCodes2} .

Questo incarico sull'ultima riga è chiamato assegnazione distruttiva dell'oggetto . Estrae il valore della proprietà di un oggetto e lo assegna alla variabile con lo stesso nome. Se desideri assegnare valori di ritorno a variabili di nome diverso, puoi farlo in questo modo let {dCodes: x, dCodes2: y} = newCodes()


Il modo migliore per questo è

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

Quindi utilizzare

a().f

ritorno 4

in ES6 puoi usare questo codice

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

In JS, possiamo facilmente restituire una tupla con un array o un oggetto, ma non dimenticare! => JS è un linguaggio callback oriented, e qui c'è un piccolo segreto per "restituire più valori" che nessuno ha ancora menzionato, prova questo:

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

diventa

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

:)

bam! Questo è semplicemente un altro modo di risolvere il tuo problema.


No, ma potresti restituire un array contenente i tuoi valori:

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

Quindi puoi accedervi in ​​questo modo:

var codes = newCodes();
var dCodes = codes[0];
var dCodes2 = codes[1];

Se vuoi mettere "etichette" su ciascuno dei valori restituiti (più facile da mantenere), puoi restituire un oggetto:

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

E per accedervi:

var codes = newCodes();
var dCodes = codes.dCodes;
var dCodes2 = codes.dCodes2;

Oltre a restituire un array o un oggetto come altri hanno consigliato, è anche possibile utilizzare una funzione di raccolta (simile a quella trovata in The Little Schemer ):

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

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

Ho fatto un test jsperf per vedere quale dei tre metodi è più veloce. La matrice è la più veloce e il collezionista è il più lento.

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


Puoi anche fare:

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

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

Puoi farlo da Javascript 1.7 in poi usando "compiti distruttivi" . Nota che questi non sono disponibili nelle vecchie versioni di Javascript (nel senso - né con ECMAScript 3a né 5a edizione).

Ti permette di assegnare a 1+ variabili contemporaneamente:

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

// or

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

Puoi anche utilizzare la 2ality.com/2014/06/es6-multiple-return-values.html per denominare i valori di ritorno in un oggetto e scegliere quelli desiderati:

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

E a proposito, non lasciarti ingannare dal fatto che ECMAScript ti permette di return 1, 2, ... Ciò che realmente accade non è ciò che potrebbe sembrare. Un'espressione in istruzione return - 1, 2, 3 - non è altro che un operatore virgola applicato ai valori letterali numerici ( 1 , 2 e 3 ) in modo sequenziale, che alla fine valuta il valore della sua ultima espressione - 3 . Ecco perché il return 1, 2, 3 è funzionalmente identico a niente di più, ma return 3 .

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

Tutto è corretto. return logicamente i processi da sinistra a destra e restituisce l'ultimo valore.

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

>> foo()
>> 3

Un altro aspetto utile per la sintassi di nuova introduzione (ES6) è l'uso della stenografia della creazione di oggetti oltre all'assegnazione distruttiva.

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

Questa sintassi può essere polyfilled con babel o altri js polyfiller per i browser più vecchi, ma fortunatamente ora funziona in modo nativo con le recenti versioni di Chrome e Firefox.

Ma come fare un nuovo oggetto, l'allocazione della memoria (e l'eventuale carico gc) sono coinvolti qui, non aspettatevi molte prestazioni da esso. JavaScript non è il miglior linguaggio per lo sviluppo di cose altamente ottimali, ma se è necessario, puoi considerare di mettere i tuoi risultati su oggetti circostanti o tali tecniche che sono solitamente trucchi di prestazioni comuni tra JavaScript, Java e altri linguaggi.







javascript