मैं जावास्क्रिप्ट में दो मान लौटाने की कोशिश कर रहा हूं । क्या यह संभव है?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
मैं जावास्क्रिप्ट में दो मान लौटाने की कोशिश कर रहा हूं । क्या यह संभव है?
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 से अलग सभी आधुनिक ब्राउज़र इस सिंटैक्स का समर्थन करते हैं, लेकिन आप ES6 कोड को आईईएल-संगत जावास्क्रिप्ट पर संकलित कर सकते हैं जैसे कि बाबेल जैसे उपकरणों के साथ ।
return {dCodes : dCodes, dCodes2 : dCodes2};
संदर्भ को आसान बनाने के लिए।
const { dCodes, dCodes2 } = newCodes();
return {dCodes, dCodes2}
केवल @Intelekshual के समान काम करती है और (2) एक ही फ़ंक्शन का उपयोग करके आप उन्हें विनाशकारी सरणियों [dCodes, dCodes2] = newCodes()
या (3) ऑब्जेक्ट्स के साथ एक्सेस कर सकते हैं ({dCodes, dCodes2} = newCodes())
(वहां एक घोषणा का उपयोग करने की आवश्यकता नहीं है ) , हालांकि var
वर्तमान साशा के उदाहरण के लिए अधिक उपयुक्त होगा)।
आप "विनाशकारी असाइनमेंट" का उपयोग करके जावास्क्रिप्ट 1.7 से आगे कर सकते हैं । ध्यान दें कि ये पुराने जावास्क्रिप्ट संस्करणों में उपलब्ध नहीं हैं (अर्थ - न तो 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 foo(){return 1,2,3;}
कर रही है console.log([].push(foo()))
बाहर प्रिंट 1.
बस एक वस्तु शाब्दिक वापसी
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()
एकमास्क्रिप्ट 6 में "विनाशकारी असाइनमेंट" (कंगैक्स के रूप में उल्लिखित) शामिल हैं, इसलिए सभी ब्राउज़रों में (सिर्फ फ़ायरफ़ॉक्स नहीं) आप मानों के एक सरणी को कैप्चर करने के लिए नाम या सरणी बनाने के उद्देश्य के बिना उन्हें कैप्चर करने में सक्षम होंगे।
//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();
आप इसे फ़ायरफ़ॉक्स में पहले ही आज़मा सकते हैं!
नए पेश किए गए (ईएस 6) सिंटैक्स का उल्लेख करने के लिए एक और मूल्य विनाशकारी असाइनमेंट के अलावा ऑब्जेक्ट निर्माण शॉर्टहैंड का उपयोग है।
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);
इस सिंटैक्स को पुराने ब्राउज़रों के लिए बेबल या अन्य जेएस पॉलीफिलर के साथ पॉलीफ़िल किया जा सकता है लेकिन सौभाग्य से अब क्रोम और फ़ायरफ़ॉक्स के हाल के संस्करणों के साथ मूल रूप से काम करता है।
लेकिन एक नई वस्तु बनाते समय, मेमोरी एलोकेशन (और अंतिम gc लोड) यहाँ शामिल है, इससे बहुत प्रदर्शन की उम्मीद न करें। वैसे भी अत्यधिक इष्टतम चीजों को विकसित करने के लिए जावास्क्रिप्ट सबसे अच्छी भाषा नहीं है, लेकिन अगर जरूरत है, तो आप अपने परिणाम को आसपास की वस्तु या ऐसी तकनीकों पर विचार कर सकते हैं जो आमतौर पर जावास्क्रिप्ट, जावा और अन्य भाषाओं के बीच सामान्य प्रदर्शन के गुर हैं।
इसके लिए सबसे अच्छा तरीका है
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
फिर उपयोग करें
a().f
वापसी ४
ES6 में आप इस कोड का उपयोग कर सकते हैं
function a(){
var d=2;
var c=3;
var f=4;
return {d,c,f}
}
किसी सरणी या ऑब्जेक्ट को वापस करने के अलावा, जैसा कि दूसरों ने सुझाया है, आप एक कलेक्टर फ़ंक्शन ( द लिटिल स्कैमर में पाए जाने वाले के समान) का भी उपयोग कर सकते हैं :
function a(collector){
collector(12,13);
}
var x,y;
a(function(a,b){
x=a;
y=b;
});
मैंने यह देखने के लिए jsperf परीक्षण किया कि तीन में से कौन सी विधि अधिक तेज़ है। ऐरे सबसे तेज़ है और कलेक्टर सबसे धीमा है।
जेएस में, हम आसानी से एक सरणी या ऑब्जेक्ट के साथ एक टपल लौटा सकते हैं, लेकिन मत भूलना! => जेएस एक 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! यह आपकी समस्या को हल करने का एक और तरीका है।
इस प्रश्न को पूर्ण संसाधन बनाने के लिए लापता महत्वपूर्ण भागों को जोड़ना, क्योंकि यह खोज परिणामों में आता है।
वस्तु विनाशकारी
ऑब्जेक्ट डिस्ट्रक्ट्यूरिंग में, आपको अपने वैरिएबल नाम के समान महत्वपूर्ण मान का उपयोग करने की आवश्यकता नहीं है, आप इसे नीचे परिभाषित करके एक अलग वेरिएबल नाम असाइन कर सकते हैं:
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);
एरेक्ट डिस्ट्रक्टिंग
सरणी विनाशकारी में, आप उन मूल्यों को छोड़ सकते हैं जिनकी आपको आवश्यकता नहीं है।
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
यह ध्यान देने योग्य है कि ...rest
हमेशा अंत में होना चाहिए क्योंकि यह सब कुछ एकत्र होने के बाद कुछ भी नष्ट करने का कोई मतलब नहीं हैrest
।
मुझे उम्मीद है कि यह इस सवाल का कुछ मूल्य जोड़ देगा :)
आप भी कर सकते हैं:
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
const {d,c,f} = a()
जावास्क्रिप्ट में कई मूल्यों को वापस करने का एक बहुत ही सामान्य तरीका एक वस्तु शाब्दिक का उपयोग कर रहा है , इसलिए कुछ इस तरह है:
const myFunction = () => {
const firstName = "Alireza",
familyName = "Dezfoolian",
age = 35;
return { firstName, familyName, age};
}
और इस तरह से मान प्राप्त करें:
myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age
या इससे भी छोटा तरीका:
const {firstName, familyName, age} = myFunction();
और उन्हें व्यक्तिगत रूप से प्राप्त करें:
firstName; //Alireza
familyName; //Dezfoolian
age; //35
आप "ऑब्जेक्ट" का उपयोग कर सकते हैं
function newCodes(){
var obj= new Object();
obj.dCodes = fg.codecsCodes.rs;
obj.dCodes2 = fg.codecsCodes2.rs;
return obj;
}
मैं नवीनतम विनाशकारी असाइनमेंट का उपयोग करने का सुझाव दूंगा (लेकिन सुनिश्चित करें कि यह आपके वातावरण में समर्थित है )
var newCodes = function () {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return {firstCodes: dCodes, secondCodes: dCodes2};
};
var {firstCodes, secondCodes} = newCodes()
मुझे ऐसा करने के दो तरीके पता हैं: 1. Array के रूप में लौटें 2. ऑब्जेक्ट के रूप में लौटें
यहाँ एक उदाहरण मैंने पाया है:
<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>
कुछ दिन पहले मुझे एक फ़ंक्शन से एकाधिक रिटर्न मान प्राप्त करने की समान आवश्यकता थी जो मैंने बनाई थी।
कई रिटर्न मानों से, मुझे किसी दिए गए शर्त के लिए केवल विशिष्ट मूल्य और फिर अन्य शर्त के अनुरूप अन्य वापसी मूल्य की आवश्यकता होती है।
यहाँ उदाहरण है कि मैंने ऐसा कैसे किया:
समारोह:
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;
}
फ़ंक्शन द्वारा लौटाए गए ऑब्जेक्ट से आवश्यक वापसी मूल्य प्राप्त करना:
var todayDate = myTodayDate().myDate;
var todayDay = myTodayDate().myDay;
var todayMonth = myTodayDate().myMonth;
var todayYear = myTodayDate().year;
इस प्रश्न का उत्तर देने का पूरा बिंदु तारीख को अच्छे प्रारूप में प्राप्त करने के इस दृष्टिकोण को साझा करना है। आशा है कि यह आपकी मदद करेगा :)