আমি জাভাস্ক্রিপ্টে দুটি মান ফেরত দেওয়ার চেষ্টা করছি । এটা কি সম্ভব?
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}
ঠিক @ ইন্টেলিকশুয়াল উল্লিখিত হিসাবে একই কাজ করে এবং (২) একই ফাংশনটি ব্যবহার করে আপনি কেবল এগুলি ডিস্ট্রাকচারিং অ্যারে [dCodes, dCodes2] = newCodes()
বা (3) অবজেক্টের সাথে অ্যাক্সেস ({dCodes, dCodes2} = newCodes())
করতে পারেন (টেলর সেখানে কোনও ডিকোলেশন ব্যবহার করার প্রয়োজন নেই ) যদিও var
বর্তমান সাশার উদাহরণের জন্য এটি আরও উপযুক্ত)
আপনি জাভাস্ক্রিপ্ট ১.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()
ইকামাস্ক্রিপ্ট এর মধ্যে "ডিস্ট্রস্ট্রাকচারিং অ্যাসাইনমেন্টস" (যেমন কানগ্যাক্স উল্লিখিত) অন্তর্ভুক্ত রয়েছে সুতরাং সমস্ত ব্রাউজারগুলিতে (কেবল ফায়ারফক্সই নয়) আপনি কেবল ক্যাপচারের একমাত্র উদ্দেশ্যে একটি নামযুক্ত অ্যারে বা অবজেক্ট তৈরি না করে মানগুলির একটি অ্যারে ক্যাপচার করতে সক্ষম হবেন।
//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();
আপনি ইতিমধ্যে এটি ফায়ারফক্সে চেষ্টা করে দেখতে পারেন!
সদ্য প্রবর্তিত (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);
এই সিনট্যাক্সটি পুরানো ব্রাউজারগুলির জন্য ব্যাবেল বা অন্যান্য জেএস পলিফিলার দিয়ে পলিফিল করা যেতে পারে তবে ভাগ্যক্রমে এখন ক্রোম এবং ফায়ারফক্সের সাম্প্রতিক সংস্করণগুলির সাথে দেশীয়ভাবে কাজ করে।
তবে একটি নতুন অবজেক্ট তৈরি করার জন্য, মেমোরি বরাদ্দ (এবং ইভেন্ট জিসি লোড) এখানে জড়িত রয়েছে, এটি থেকে বেশি পারফরম্যান্সের আশা করবেন না। যাইহোক জাভা স্ক্রিপ্ট সর্বোচ্চ অনুকূল জিনিসগুলি বিকাশের জন্য সেরা ভাষা নয় তবে যদি এটি প্রয়োজন হয় তবে আপনি আপনার ফলাফলকে আশেপাশের অবজেক্টে বা এমন কৌশলগুলিতে রাখার কথা বিবেচনা করতে পারেন যা সাধারণত জাভাস্ক্রিপ্ট, জাভা এবং অন্যান্য ভাষার মধ্যে পারফরম্যান্সের সাধারণ কৌশল।
এটির জন্য সেরা উপায়
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}
}
অন্যরা যেমন সুপারিশ করেছে তেমন একটি অ্যারে বা কোনও জিনিস ফেরত দেওয়া ছাড়াও আপনি একটি সংগ্রাহক ফাংশনও ব্যবহার করতে পারেন ( দ্য লিটল স্কিমারের মতো এটি ):
function a(collector){
collector(12,13);
}
var x,y;
a(function(a,b){
x=a;
y=b;
});
আমি তিনটি পদ্ধতির মধ্যে কোনটি দ্রুত see অ্যারে দ্রুত এবং সংগ্রাহক সবচেয়ে ধীর।
জেএসে, আমরা সহজেই একটি অ্যারে বা অবজেক্টের সাথে একটি টিপল ফিরিয়ে দিতে পারি, তবে ভুলে যাবেন না! => জেএস একটি 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
।
আমি আশা করি এটি এই প্রশ্নের কিছুটা মূল্য যোগ করবে :)
জাভাস্ক্রিপ্টে একাধিক মান প্রত্যাবর্তনের খুব সাধারণ উপায় হ'ল একটি অবজেক্ট ল্যাটারাল ব্যবহার করা , সুতরাং এরকম কিছু:
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. অ্যারে হিসাবে ফিরুন 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;
এই প্রশ্নের উত্তর দেওয়ার পুরো বিষয়টি হ'ল ভাল ফরম্যাটে তারিখ পাওয়ার এই পদ্ধতির ভাগ করে নেওয়া। আশা করি এটি আপনাকে সহায়তা করেছে :)