Saya mencoba untuk mengembalikan dua nilai dalam JavaScript. Itu mungkin?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
Tidak, tapi anda bisa mengembalikan array yang berisi nilai-nilai anda:
function getValues() {
return [getFirstValue(), getSecondValue()];
}
Kemudian anda dapat mengakses mereka seperti:
var values = getValues();
var first = values[0];
var second = values[1];
Dengan terbaru ECMAScript 6 syntax*anda juga dapat destructure kembali nilai lebih intuitif:
const [first, second] = getValues();
Jika anda ingin menempatkan "label" pada masing-masing kembali nilai-nilai (lebih mudah untuk mempertahankan), anda dapat kembali suatu objek:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
Dan untuk mengaksesnya:
var values = getValues();
var first = values.first;
var second = values.second;
Atau dengan ES6 sintaks:
const {first, second} = getValues();
* Lihat tabel untuk kompatibilitas browser. Pada dasarnya, semua modern browser selain IE dukungan sintaks ini, tetapi anda dapat mengkompilasi ES6 kode turun ke IE-kompatibel JavaScript pada waktu membangun dengan alat-alat seperti Babel.
Anda dapat melakukan ini dari Javascript 1.7 seterusnya menggunakan "destructuring tugas". Catatan bahwa ini tidak tersedia di lebih tua Javascript versi (yang berarti — baik dengan ECMAScript ke-3 atau ke-5 edisi).
Hal ini memungkinkan anda untuk menetapkan 1+ secara simultan variabel:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
Anda juga dapat menggunakan objek destructuring dikombinasikan dengan nilai properti singkatan nama kembali nilai-nilai pada suatu benda dan memilih yang anda inginkan:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
Dan by the way, don't tertipu oleh fakta bahwa ECMAScript memungkinkan anda untuk kembali 1, 2, ...
. Apa yang benar-benar terjadi di sana adalah bukan apa yang mungkin tampak. Ekspresi dalam pernyataan return — 1, 2, 3
— adalah apa-apa tapi operator koma diterapkan untuk literal numerik (1
, 2
, dan 3
) secara berurutan, yang akhirnya mengevaluasi nilai dari ekspresi terakhir — 3
. Yang's mengapa kembali 1, 2, 3
secara fungsional identik dengan apa-apa lagi tapi kembali 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
Hanya kembali sebuah objek literal
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);
Sejak ES6 anda dapat melakukan hal ini
let newCodes = function() {
const dCodes = fg.codecsCodes.rs
const dCodes2 = fg.codecsCodes2.rs
return {dCodes, dCodes2}
};
let {dCodes, dCodes2} = newCodes()
Kembali ekspresi {dCodes, dCodes2}
adalah nilai properti singkatan dan setara dengan ini {dCodes: dCodes, dCodes2: dCodes2}
.
Tugas ini pada baris terakhir ini disebut objek merusak penugasan. Itu ekstrak nilai properti dari sebuah objek dan memberikan ke variabel dengan nama yang sama. Jika anda'd seperti untuk menetapkan kembali nilai-nilai ke variabel yang berbeda nama yang anda bisa lakukan seperti ini mari {dCodes: x, dCodes2: y} = newCodes()
Ecmascript 6 termasuk "destructuring tugas" (sebagai kangax disebutkan) jadi di semua browser (bukan hanya Firefox) anda'akan dapat menangkap sebuah array nilai tanpa harus membuat sebuah array atau objek untuk tujuan menangkap mereka.
//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();
Anda dapat mencobanya di Firefox sudah!
Lain layak lagi baru diperkenalkan (ES6) sintaks penggunaan objek penciptaan singkatan selain merusak tugas.
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);
Sintaks ini dapat polyfilled dengan babel atau lainnya js polyfiller untuk browser lama tapi untungnya sekarang bekerja native dengan versi terbaru dari Chrome dan Firefox.
Tapi seperti membuat objek baru, alokasi memori (dan akhirnya gc beban) yang terlibat di sini, don't berharap banyak kinerja dari itu. JavaScript bukanlah bahasa terbaik untuk mengembangkan potensi optimal hal-hal lagian tetapi jika itu diperlukan, anda dapat mempertimbangkan untuk menempatkan hasil anda di sekitar objek atau teknik-teknik tersebut yang biasanya umum kinerja trik antara JavaScript, Java dan bahasa-bahasa lain.
Cara terbaik untuk ini adalah
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
Kemudian gunakan
a().f
kembali 4
di ES6 anda dapat menggunakan kode ini
function a(){
var d=2;
var c=3;
var f=4;
return {d,c,f}
}
Selain mengembalikan sebuah array atau obyek yang lain telah direkomendasikan, anda juga dapat menggunakan fungsi kolektor (mirip dengan yang ditemukan di Sedikit Siasat):
function a(collector){
collector(12,13);
}
var x,y;
a(function(a,b){
x=a;
y=b;
});
Saya membuat jsperf tes untuk melihat mana salah satu dari tiga metode ini lebih cepat. Array adalah cara tercepat dan kolektor adalah yang paling lambat.
Di JS, kita dapat dengan mudah kembali sebuah tuple dengan array atau objek, tapi jangan lupa! => JS adalah balik
yang berorientasi pada bahasa, dan ada sebuah rahasia kecil di sini untuk "kembali beberapa nilai" ada yang belum disebutkan, coba ini:
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
menjadi
var newCodes = function(fg, cb) {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
cb(null, dCodes, dCodes2);
};
:)
bam! Ini hanya cara lain untuk memecahkan masalah anda.
Saya akan menyarankan untuk menggunakan terbaru destructuring tugas (Tapi pastikan itu's didukung di lingkungan anda)
var newCodes = function () {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return {firstCodes: dCodes, secondCodes: dCodes2};
};
var {firstCodes, secondCodes} = newCodes()
Sebuah cara yang sangat umum untuk kembali beberapa nilai di javascript adalah dengan menggunakan objek literal, jadi sesuatu seperti:
const myFunction = () => {
const firstName = "Alireza",
familyName = "Dezfoolian",
age = 35;
return { firstName, familyName, age};
}
dan mendapatkan nilai-nilai seperti ini:
myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age
atau bahkan lebih pendek:
const {firstName, familyName, age} = myFunction();
dan mendapatkan mereka secara individual seperti:
firstName; //Alireza
familyName; //Dezfoolian
age; //35
Saya tahu dua cara untuk melakukan ini:
Berikut ini's contoh yang saya temukan:
<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>
Saya tidak menambahkan baru di sini tapi lain alternatif cara.
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
let [...val] = [dCodes,dCodes2];
return [...val];
};
Menambahkan bagian penting yang hilang untuk membuat pertanyaan ini sumber daya yang lengkap, karena hal ini muncul dalam hasil pencarian.
Objek Destructuring
Di objek destructuring, anda don't perlu harus menggunakan nilai kunci yang sama sebagai nama variabel, anda dapat menetapkan nama variabel yang berbeda dengan mendefinisikan sebagai berikut:
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 Destructuring
Di hotel destructuring, anda dapat melewatkan nilai-nilai anda don't perlu.
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
It's perlu disadari bahwa ...sisa
harus selalu berada di akhir seperti itu doesn't masuk akal untuk merusak apa pun setelah segala sesuatu yang lain adalah agregat untuk istirahat
.
Saya berharap ini akan menambahkan beberapa nilai untuk pertanyaan ini :)
Beberapa Hari yang lalu saya memiliki kebutuhan yang sama untuk mendapatkan beberapa kembali nilai-nilai dari suatu fungsi yang saya buat.
Dari banyak kembali nilai-nilai , yang saya butuhkan untuk kembali hanya nilai tertentu untuk kondisi tertentu dan kemudian kembali nilai yang sesuai untuk kondisi lain.
Berikut adalah Contoh bagaimana saya melakukannya :
Fungsi:
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;
}
Semakin Diperlukan kembali nilai dari objek yang dikembalikan oleh fungsi :
var todayDate = myTodayDate().myDate;
var todayDay = myTodayDate().myDay;
var todayMonth = myTodayDate().myMonth;
var todayYear = myTodayDate().year;
Inti dari pertanyaan ini adalah untuk berbagi pendekatan ini mendapatkan Tanggal dalam format yang baik. Berharap itu membantu anda :)
Yah kita tidak bisa benar-benar melakukan apa yang anda mencoba. Tapi sesuatu yang mungkin di bawah ini bisa dilakukan.
function multiReturnValues(){
return {x:10,y:20};
}
Kemudian ketika memanggil metode
const {x,y} = multiReturnValues();
console.log(x) ---> 10
console.log(y) ---> 20