JavaScript에서 여러 값을 반환 하시겠습니까?
JavaScript에서 두 값을 반환하려고합니다. 가능합니까?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
아니요,하지만 값이 포함 된 배열을 반환 할 수 있습니다.
function getValues() {
return [getFirstValue(), getSecondValue()];
}
그런 다음 다음과 같이 액세스 할 수 있습니다.
var values = getValues();
var first = values[0];
var second = values[1];
최신 ECMAScript 6 구문 *을 사용하면 반환 값을보다 직관적으로 분해 할 수도 있습니다.
const [first, second] = getValues();
반환 된 각 값에 "라벨"을 추가하려면 (유지 관리가 더 쉬움) 객체를 반환 할 수 있습니다.
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
그리고 액세스하려면 :
var values = getValues();
var first = values.first;
var second = values.second;
또는 ES6 구문 :
const {first, second} = getValues();
* 브라우저 호환성 은 이 표 를 참조하십시오 . 기본적으로 IE를 제외한 모든 최신 브라우저는이 구문을 지원하지만 Babel 과 같은 도구를 사용하여 빌드시 ES6 코드를 IE 호환 JavaScript로 컴파일 할 수 있습니다 .
"destructuring assignments"를 사용하여 Javascript 1.7부터이 작업을 수행 할 수 있습니다 . 이전 Javascript 버전에서는 사용할 수 없습니다 (즉, ECMAScript 3 판과 5 판 모두에서 사용할 수 없음).
동시에 1 개 이상의 변수에 할당 할 수 있습니다.
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
또한 속성 값 속기와 결합 된 객체 비 구조화를 사용하여 객체 의 반환 값 이름을 지정하고 원하는 값을 선택할 수 있습니다.
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
그건 그렇고, ECMAScript가 당신에게 허용한다는 사실에 속지 마십시오 return 1, 2, ...
. 실제로 일어나는 일은 보이지 않을 수도 있습니다. 리턴 명령문 표현식 - 1, 2, 3
- 아무것도하지만 콤마 연산자 (숫자 리터럴인가 1
, 2
그리고 3
결국 마지막 표현식의 값으로 계산하는) 순차 - 3
. 그렇기 때문에 return 1, 2, 3
기능적으로 return 3
.
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
객체 리터럴 만 반환
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);
ES6 이후로 할 수 있습니다.
let newCodes = function() {
const dCodes = fg.codecsCodes.rs
const dCodes2 = fg.codecsCodes2.rs
return {dCodes, dCodes2}
};
let {dCodes, dCodes2} = newCodes()
반환 표현식 {dCodes, dCodes2}
은 속성 값의 속기 이며 이것과 동일합니다 {dCodes: dCodes, dCodes2: dCodes2}
.
마지막 줄에있는이 할당을 객체 파괴 할당 이라고 합니다 . 객체의 속성 값을 추출하여 같은 이름의 변수에 할당합니다. 다른 이름의 변수에 반환 값을 할당하려면 다음과 같이 할 수 있습니다.let {dCodes: x, dCodes2: y} = newCodes()
Ecmascript 6에는 "구조화 할당"(kangax 언급 됨)이 포함되어 있으므로 모든 브라우저 (Firefox뿐만 아니라)에서 값을 캡처하기위한 목적으로 명명 된 배열이나 개체를 만들지 않고도 값 배열을 캡처 할 수 있습니다.
//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();
Firefox에서 이미 사용해 볼 수 있습니다!
새로 도입 된 (ES6) 구문을 언급 할 또 다른 가치는 할당을 파괴하는 것 외에도 객체 생성 속기 사용입니다.
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);
이 구문은 이전 브라우저 용 babel 또는 기타 js 폴리 필러로 폴리 필 할 수 있지만 다행히 현재 Chrome 및 Firefox의 최신 버전에서 기본적으로 작동합니다.
그러나 새 객체를 만들 때 메모리 할당 (및 최종 gc로드)이 여기에 포함되므로 많은 성능을 기대하지 마십시오. 어쨌든 JavaScript는 최적의 것을 개발하는 데 가장 적합한 언어는 아니지만 필요한 경우 주변 객체 또는 일반적으로 JavaScript, Java 및 기타 언어 간의 일반적인 성능 트릭 인 기술에 결과를 넣는 것을 고려할 수 있습니다.
이를위한 가장 좋은 방법은
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
그런 다음
a().f
반환 4
ES6에서는이 코드를 사용할 수 있습니다.
function a(){
var d=2;
var c=3;
var f=4;
return {d,c,f}
}
다른 사람들이 권장 한대로 배열 또는 객체를 반환하는 것 외에도 수집기 함수를 사용할 수도 있습니다 ( The Little Schemer 에서 찾은 것과 유사 ).
function a(collector){
collector(12,13);
}
var x,y;
a(function(a,b){
x=a;
y=b;
});
세 가지 방법 중 어느 것이 더 빠른지 확인하기 위해 jsperf 테스트를했습니다. 어레이가 가장 빠르고 수집기가 가장 느립니다.
http://jsperf.com/returning-multiple-values-2
JS에서는 배열이나 객체로 튜플을 쉽게 반환 할 수 있지만 잊지 마세요! => JS는 callback
지향 언어이며, 아직 아무도 언급하지 않은 "복수 값 반환"에 대한 약간의 비밀이 있습니다. 다음을 시도해보십시오.
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
된다
var newCodes = function(fg, cb) {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
cb(null, dCodes, dCodes2);
};
:)
bam! 이것은 단순히 문제를 해결하는 또 다른 방법입니다.
다음을 수행 할 수도 있습니다.
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
const {d,c,f} = a()
"개체"를 사용할 수 있습니다.
function newCodes(){
var obj= new Object();
obj.dCodes = fg.codecsCodes.rs;
obj.dCodes2 = fg.codecsCodes2.rs;
return obj;
}
모두 맞습니다. return
논리적으로 왼쪽에서 오른쪽으로 처리하고 마지막 값을 반환합니다.
function foo(){
return 1,2,3;
}
>> foo()
>> 3
최신 destructuring 할당 을 사용하는 것이 좋습니다 (그러나 귀하의 환경에서 지원되는지 확인하십시오 )
var newCodes = function () {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return {firstCodes: dCodes, secondCodes: dCodes2};
};
var {firstCodes, secondCodes} = newCodes()
I know of two ways to do this: 1. Return as Array 2. Return as Object
Here's an example I found:
<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>
A very common way to return multiple values in javascript is using an object literals, so something like:
const myFunction = () => {
const firstName = "Alireza",
familyName = "Dezfoolian",
age = 35;
return { firstName, familyName, age};
}
and get the values like this:
myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age
or even a shorter way:
const {firstName, familyName, age} = myFunction();
and get them individually like:
firstName; //Alireza
familyName; //Dezfoolian
age; //35
Few Days ago i had the similar requirement of getting multiple return values from a function that i created.
From many return values , i needed it to return only specific value for a given condition and then other return value corresponding to other condition.
Here is the Example of how i did that :
Function:
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;
}
Getting Required return value from object returned by function :
var todayDate = myTodayDate().myDate;
var todayDay = myTodayDate().myDay;
var todayMonth = myTodayDate().myMonth;
var todayYear = myTodayDate().year;
The whole point of answering this question is to share this approach of getting Date in good format. Hope it helped you :)
I am nothing adding new here but another alternate way.
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
let [...val] = [dCodes,dCodes2];
return [...val];
};
Adding the missing important parts to make this question a complete resource, as this comes up in search results.
Object Destructuring
In object destructuring, you don't necessarily need to use the same key value as your variable name, you can assign a different variable name by defining it as below:
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
In array destructuring, you can skip the values you don't need.
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 worth noticing that ...rest
should always be at the end as it doesn't make any sense to destruct anything after everything else is aggregated to rest
.
I hope this will add some value to this question :)
Well we can not exactly do what your trying. But something likely to below can be done.
function multiReturnValues(){
return {x:10,y:20};
}
Then when calling the method
const {x,y} = multiReturnValues();
console.log(x) ---> 10
console.log(y) ---> 20
참고URL : https://stackoverflow.com/questions/2917175/return-multiple-values-in-javascript
'Program Tip' 카테고리의 다른 글
PHP 배열이 연관 또는 순차인지 확인하는 방법은 무엇입니까? (0) | 2020.09.29 |
---|---|
POST 쿼리 매개 변수를 검색하는 방법은 무엇입니까? (0) | 2020.09.29 |
Eclipse에서 줄 번호를 어떻게 표시 할 수 있습니까? (0) | 2020.09.29 |
JavaScript의 HTTP GET 요청? (0) | 2020.09.29 |
과 (0) | 2020.09.29 |