আমি কীভাবে "আর্গুমেন্টস" অবজেক্টটিকে জাভাস্ক্রিপ্টে একটি অ্যারে রূপান্তর করতে পারি?


433

argumentsজাভাস্ক্রিপ্ট বস্তুর একটি বিজোড় আঁচিল-এটা ঠিক সবচেয়ে পরিস্থিতিতে একটি অ্যারের মত কাজ করে, কিন্তু এটা না আসলে একটি অ্যারের বস্তু। এটা যেহেতু সত্যিই কিছু সম্পূর্ণরূপে অন্য , তা থেকে দরকারী ফাংশন নেই Array.prototypeমত forEach, sort, filter, এবংmap

লুপের জন্য একটি সহজ দিয়ে আর্গুমেন্ট অবজেক্ট থেকে একটি নতুন অ্যারে তৈরি করা তুচ্ছভাবে সহজ। উদাহরণস্বরূপ, এই ফাংশনটি তার যুক্তিগুলি সাজায়:

function sortArgs() {
    var args = [];
    for (var i = 0; i < arguments.length; i++)
        args[i] = arguments[i];
    return args.sort();
}

তবে অত্যন্ত কার্যকর জাভাস্ক্রিপ্ট অ্যারে ফাংশনটিতে অ্যাক্সেস পাওয়ার জন্য এটি করা একটি বরং করুণ কাজ। স্ট্যান্ডার্ড লাইব্রেরিটি ব্যবহার করে এটি করার কোনও অন্তর্নির্মিত উপায় আছে?


উত্তর:


725

বাকি পরামিতিগুলি ব্যবহার করে ES6

আপনি যদি ES6 ব্যবহার করতে সক্ষম হন তবে আপনি এটি ব্যবহার করতে পারেন:

বিশ্রামের পরামিতি

function sortArgs(...args) {
  return args.sort(function (a, b) { return a - b; });
}

document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();

যেমন আপনি লিঙ্কে পড়তে পারেন

বাকী প্যারামিটার সিনট্যাক্স আমাদেরকে আরে হিসাবে অনির্দিষ্ট সংখ্যক যুক্তি উপস্থাপন করতে দেয়।

আপনি যদি ...সিনট্যাক্স সম্পর্কে আগ্রহী হন তবে এটিকে স্প্রেড অপারেটর বলা হয় এবং আপনি এখানে আরও পড়তে পারেন

ES6 অ্যারে.ফর্ম () ব্যবহার করে

ব্যবহার Array.from :

function sortArgs() {
  return Array.from(arguments).sort(function (a, b) { return a - b; });
}

document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();

Array.from অ্যারে-এর মতো বা আইটেবল অবজেক্টগুলিকে কেবল অ্যারের উদাহরণগুলিতে রূপান্তর করুন।



ES5

আপনি আসলে একটি আর্গুমেন্ট অবজেক্টে কেবলমাত্র Arrayএর sliceফাংশনটি ব্যবহার করতে পারেন এবং এটি এটি একটি মানক জাভাস্ক্রিপ্ট অ্যারে রূপান্তরিত করবে। অ্যারের প্রোটোটাইপের মাধ্যমে আপনাকে কেবল এটি ম্যানুয়ালি উল্লেখ করতে হবে:

function sortArgs() {
    var args = Array.prototype.slice.call(arguments);
    return args.sort();
}

কেন এই কাজ করে? ভাল, এখানে নিজেই ECMAScript 5 ডকুমেন্টেশনের একটি অংশ রয়েছে :

দ্রষ্টব্য : sliceফাংশনটি ইচ্ছাকৃতভাবে জেনেরিক; এটা প্রয়োজন হয় না যে তার এই মান একটি অ্যারের বস্তু হতে। সুতরাং এটি একটি পদ্ধতি হিসাবে ব্যবহারের জন্য অন্যান্য ধরণের অবজেক্টগুলিতে স্থানান্তরিত হতে পারে। sliceকোনও হোস্ট অবজেক্টে ফাংশনটি সফলভাবে প্রয়োগ করা যায় কিনা তা বাস্তবায়ন নির্ভর।

অতএব, sliceকোনও lengthসম্পত্তি আছে যা কিছুতে কাজ করে যা argumentsস্বাচ্ছন্দ্যে করে।


আপনার পক্ষে যদি Array.prototype.sliceমুখের পরিমাণ খুব বেশি হয় তবে আপনি অ্যারে আক্ষরিক ব্যবহার করে এটি সামান্য সংক্ষেপে বলতে পারেন:

var args = [].slice.call(arguments);

তবে, আমি মনে করি যে পূর্ববর্তী সংস্করণটি আরও স্পষ্ট, তাই আমি এটির পরিবর্তে পছন্দ করব। অ্যারের আক্ষরিক স্বরলিপিটি আপত্তিজনকভাবে হ্যাকি অনুভব করে এবং অদ্ভুত লাগে।


5
ফায়ারফক্সের সাম্প্রতিক সংস্করণগুলিতে (২.০?) এবং ECMAScript 5 তে একটি অ্যারে.স্লাইস পদ্ধতি রয়েছে যা এটিকে সামান্য সহজ করে তোলে। আপনি এটিকে এটির মতো বলবেন: var arge = Array.slice (আর্গুমেন্ট, 0);।
ম্যাথু ক্রামলে

9
কিসের 0জন্য? যেহেতু আপনি পাস করতে চান এমন কোনও যুক্তি নেই, কেন আপনি কেবল ব্যবহার করতে পারবেন না var args = Array.prototype.slice.call(arguments);? [ এমডিসি আর্গুমেন্ট পৃষ্ঠা ] ( বিকাশকারী.মোজিলা.আর.ইন / জাভাস্ক্রিপ্ট / রেফারেন্স/… ) ছাড়াই পদ্ধতিটি প্রস্তাব করে 0
পিটার আজতাই

3
@ বার্নি - বাছাই করা প্রয়োজনীয় কারণ মূল প্রশ্নটি আর্গুমেন্টগুলি বাছাই করতে চায়। আপনি যদি এটিকে কেবল অ্যারেতে রূপান্তর করতে চান তবে এটি প্রয়োজনীয় নয়।
ক্রাইস

17
"আপনার পক্ষে যুক্তিগুলিতে টুকরো টুকরো করা উচিত নয় কারণ এটি জাভাস্ক্রিপ্ট ইঞ্জিনগুলিতে অনুকূলিতকরণ প্রতিরোধ করে (উদাহরণস্বরূপ V8)" - MDN থেকে developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
frameworkninja

3
আমি নিশ্চিত নই যে এটি মূল প্রশ্নের উত্তর দিচ্ছে। সময় কেটে গেল। ফায়ারফক্স এবং ক্রোমে পরীক্ষিত ES6 এর সাথে, বাকী প্যারামিটারটি একটি ভাল বিকল্প হয়ে উঠছে - function sortArgs(...argsToSort) { return argsToSort.sort(); }MDN বিকাশকারী
থেকে- mozilla.org/en-US/docs/Web/JavaScript/References/…

40

এই ব্লুবার্ড গ্রন্থাগার উইকি পৃষ্ঠার প্রতিশ্রুতি দেওয়ার মতো এটিও মূল্যবান যে এটি কীভাবে ভি 8 জাভাস্ক্রিপ্ট ইঞ্জিনের অধীনেarguments ফাংশনটিকে অপটিমাইজ করতে সক্ষম করে এমনভাবে অ্যারেটিকে কীভাবে পরিচালনা করতে হবে তা দেখায় :

function doesntLeakArguments() {
    var args = new Array(arguments.length);
    for(var i = 0; i < args.length; ++i) {
        args[i] = arguments[i];
    }
    return args;
}

এই পদ্ধতিটি পক্ষে হয় var args = [].slice.call(arguments);। লেখক এছাড়াও দেখায় যে কীভাবে কোনও বিল্ড স্টেপ ভার্বোসটি হ্রাস করতে সহায়তা করে।


2
ব্লুবার্ড অপটিমাইজেশন কিলার পৃষ্ঠাটির লিঙ্কটির জন্য +1 এবং ধন্যবাদ। পিএস: আমি সম্প্রতি এই অপটিমাইজেশনটি নোড-থানকিফাই প্রকল্পে ব্যবহৃত দেখেছি ।
ইয়ভেস এম

29
function sortArgs(){ return [].slice.call(arguments).sort() }

// Returns the arguments object itself
function sortArgs(){ return [].sort.call(arguments) }

কিছু অ্যারে পদ্ধতি ইচ্ছাকৃতভাবে টার্গেট অবজেক্টটিকে আসল অ্যারে হিসাবে না করার জন্য তৈরি করা হয়। তাদের কেবল দৈর্ঘ্য এবং সূচকগুলির নামের সম্পত্তি থাকতে হবে (যা অবশ্যই শূন্য বা বৃহত্তর পূর্ণসংখ্যার)।

[].sort.call({0:1, 1:0, length:2}) // => ({0:0, 1:1, length:2})

12

ব্যবহার করুন:

function sortArguments() {
  return arguments.length === 1 ? [arguments[0]] :
                 Array.apply(null, arguments).sort();
}

Array(arg1, arg2, ...) আয় [arg1, arg2, ...]

Array(str1) আয় [str1]

Array(num1) আছে এমন একটি অ্যারের ফিরিয়ে দেয় num1উপাদান করে

আপনার অবশ্যই আর্গুমেন্টের সংখ্যাটি চেক করতে হবে!

Array.slice সংস্করণ (ধীর):

function sortArguments() {
  return Array.prototype.slice.call(arguments).sort();
}

Array.push সংস্করণ (ধীরে ধীরে ধীরে ধীরে):

function sortArguments() {
  var args = [];
  Array.prototype.push.apply(args, arguments);
  return args.sort();
}

সরান সংস্করণ (ধীর, তবে ছোট আকারটি দ্রুত):

function sortArguments() {
  var args = [];
  for (var i = 0; i < arguments.length; ++i)
    args[i] = arguments[i];
  return args.sort();
}

Array.concat সংস্করণ (সবচেয়ে ধীর):

function sortArguments() {
  return Array.prototype.concat.apply([], arguments).sort();
}

1
নোট করুন যে অ্যারে.কনকাটে ফ্ল্যাটিং আচরণের কারণে এটি অ্যারে আর্গুমেন্ট গ্রহণ করবে। সাজ্টআরগমেন্টস (2, [3,0], 1) 0,1,2,3 প্রদান করে।
হাফথর

9

আপনি যদি jQuery ব্যবহার করেন তবে নিম্নলিখিতটি আমার মতে মনে রাখা সহজ deal

function sortArgs(){
  return $.makeArray(arguments).sort();
}

1
এটি খাঁটি জেএসে মূলত আমি যা খুঁজছিলাম, তবে jQuery কীভাবে জেএসকে কুঁচকে ফেলার জন্য আরও সহজ করে তোলে তার শক্ত উদাহরণের জন্য এটি +1।
অ্যান্ড্রু কোলসন

2
"ফ্রেমওয়ার্ক / লাইব্রেরির জন্য অন্য কোনও ট্যাগ অন্তর্ভুক্ত না করা পর্যন্ত একটি খাঁটি জাভাস্ক্রিপ্ট উত্তর আশা করা যায়।"
মিশা পেরেকোভস্কি

6

ইসমাস্ক্রিপ্ট u-তে কুৎসিত হ্যাকের মতো ব্যবহার করার দরকার নেই Array.prototype.slice()। পরিবর্তে আপনি স্প্রেড সিনট্যাক্স ( ...) ব্যবহার করতে পারেন ।

(function() {
  console.log([...arguments]);
}(1, 2, 3))

এটি দেখতে অদ্ভুত লাগতে পারে তবে এটি মোটামুটি সহজ। এটি কেবলমাত্র argumentsউপাদানগুলি বের করে এবং এটিকে আবার অ্যারেতে রাখে। আপনি যদি এখনও বুঝতে না পারেন তবে এই উদাহরণগুলি দেখুন:

console.log([1, ...[2, 3], 4]);
console.log([...[1, 2, 3]]);
console.log([...[...[...[1]]]]);

মনে রাখবেন যে এটি IE 11 এর মতো কিছু পুরানো ব্রাউজারগুলিতে কাজ করে না, তাই আপনি যদি এই ব্রাউজারগুলিকে সমর্থন করতে চান তবে আপনার বাবেল ব্যবহার করা উচিত ।


5

আর্গুমেন্টগুলিকে অ্যারেতে রূপান্তর করার বিভিন্ন পদ্ধতির মানদণ্ড এখানে

আমার হিসাবে, অল্প পরিমাণে তর্কগুলির জন্য সর্বোত্তম সমাধানটি হ'ল:

function sortArgs (){
  var q = [];
  for (var k = 0, l = arguments.length; k < l; k++){
    q[k] = arguments[k];
  }
  return q.sort();
}

অন্যান্য ক্ষেত্রে:

function sortArgs (){ return Array.apply(null, arguments).sort(); }

মানদণ্ডের জন্য +1 বর্তমানে গ্রাফগুলি আপনার sortArgsফায়ারফক্সে 6 গুণ দ্রুত, তবে সর্বশেষতম ক্রোমের তুলনায় দ্বিগুণ ধীর দেখায় Array.apply
জোয়েটউইডল

1
যেহেতু অ্যারে.প্রোটোটাইপ.স্লাইস হ্রাস করা হয়েছে কারণ এটি জেএস ভি 8 ইঞ্জিন অপ্টিমাইজেশনকে বাধা দেয় আমি ES6 ব্যাপকভাবে উপলব্ধ না হওয়া পর্যন্ত এটি সেরা সমাধান হিসাবে বিবেচনা করি +1
সাশা

1
তাছাড়া অ্যারে.স্লাইস () এর মতো অ্যারে জেনেরিক পদ্ধতিগুলিও হ্রাস করা হয়েছে
সাশা

4

আমি ECMAScript 6 স্প্রেড অপারেটর ব্যবহার করার পরামর্শ দিচ্ছি , যা পিছনে প্যারামিটারগুলি অ্যারেতে বাঁধবে। এই সমাধানের সাহায্যে আপনাকে argumentsঅবজেক্টটি স্পর্শ করতে হবে না এবং আপনার কোডটি সরল করা হবে। এই সমাধানটির ক্ষতিটি হ'ল এটি বেশিরভাগ ব্রাউজারগুলিতে কাজ করে না, সুতরাং এর পরিবর্তে আপনাকে বাবেলের মতো একটি জেএস সংকলক ব্যবহার করতে হবে। হুডের নীচে বাবেল argumentsএকটি লুপের জন্য একটি অ্যারেতে রূপান্তরিত করে।

function sortArgs(...args) {
  return args.sort();
}

আপনি যদি কোনও ইসমাএসক্রিপ্ট 6 ব্যবহার করতে না পারেন তবে আমি @ জনাথন ফিংল্যান্ডের মতো কয়েকটি উত্তর দেখার পরামর্শ দিচ্ছি

function sortArgs() {
    var args = Array.prototype.slice.call(arguments);
    return args.sort();
}

4

Lodash:

var args = _.toArray(arguments);

কর্মে:

(function(){ console.log(_.toArray(arguments).splice(1)); })(1, 2, 3)

সৃষ্টি করে:

[2,3]

6
না কেন _.toArray?
মেনিক্সেটর

5
তবে _.toArrayএটি আরও উপযুক্ত।
মেনিক্সেটর

আমি যুক্তি দিয়ে বলব _ যেহেতু আপনি প্রায়শই কিছু নেতৃস্থানীয় যুক্তি বাদ দিতে চান তাই স্লাইস আরও উপযুক্ত।
হাফথর

4

ব্যবহার করুন Array.from(), যা একটি অ্যারের-মতো বস্তু (যেমন arguments) আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এটিকে অ্যারেতে রূপান্তর করে:

(function() {
  console.log(Array.from(arguments));
}(1, 2, 3));

মনে রাখবেন যে এটি IE 11 এর মতো কিছু পুরানো ব্রাউজারগুলিতে কাজ করে না, তাই আপনি যদি এই ব্রাউজারগুলিকে সমর্থন করতে চান তবে আপনার বাবেল ব্যবহার করা উচিত ।


3
function sortArg(){
var args = Array.from(arguments); return args.sort();
}

 function sortArg(){
    var args = Array.from(arguments); 
    return args.sort();
    }
 
 console.log(sortArg('a', 'b', 1, 2, '34', 88, 20, '19', 39, 'd', 'z', 'ak', 'bu', 90));


1

আর একটি উত্তর।

কালো যাদু বানান ব্যবহার করুন:

function sortArguments() {
  arguments.__proto__ = Array.prototype;
  return arguments.slice().sort();
}

ফায়ারফক্স, ক্রোম, নোড.জেএস, আইই ১১ ঠিক আছে।


6
এটি অবশ্যই সেরা সমাধান ... আপনি যদি নিজের কোডটি সম্পূর্ণ অপঠনযোগ্য করতে চান তবে। এছাড়াও, __proto__হ্রাস করা হয়। MDN ডক্স দেখুন ।
মিশা পেরেকোভস্কি

1

ব্যবহার করার চেষ্টা করুন Object.setPrototypeOf()

ব্যাখ্যা: সেট prototypeঅফ argumentsটুArray.prototype

function toArray() {
  return Object.setPrototypeOf(arguments, Array.prototype)
} 

console.log(toArray("abc", 123, {def:456}, [0,[7,[14]]]))


ব্যাখ্যা: প্রতিটি সূচী নিন arguments, অ্যারের সম্পর্কিত সূচীতে আইটেমটিকে একটি অ্যারেতে রাখুন।

বিকল্পভাবে ব্যবহার করতে পারে Array.prototype.map()

function toArray() {
  return [].map.call(arguments, (_,k,a) => a[k])
} 

console.log(toArray("abc", 123, {def:456}, [0,[7,[14]]]))


ব্যাখ্যা: প্রতিটি সূচী নিন arguments, অ্যারের সম্পর্কিত সূচীতে আইটেমটিকে একটি অ্যারেতে রাখুন।

for..of লুপ

function toArray() {
 let arr = []; for (let prop of arguments) arr.push(prop); return arr
} 

console.log(toArray("abc", 123, {def:456}, [0,[7,[14]]]))


অথবা Object.create()

ব্যাখ্যা: বস্তু তৈরি করুন, প্রতিটি সূচকে আইটেমগুলিতে বস্তুর বৈশিষ্ট্য নির্ধারণ করুন arguments; prototypeতৈরি বস্তুর সেটArray.prototype

function toArray() {
  var obj = {};
  for (var prop in arguments) {
    obj[prop] = {
      value: arguments[prop],
      writable: true,
      enumerable: true,
      configurable: true
    }
  } 
  return Object.create(Array.prototype, obj);
}

console.log(toArray("abc", 123, {def: 456}, [0, [7, [14]]]))


আপনি লোকদের জিজ্ঞাসা করছেন যে আপনার উত্তর "দীর্ঘ উত্তর" সম্পর্কে প্রশ্নের অধীনে সতর্কতাকে সন্তুষ্ট করে কিনা। আপনার উত্তরটির সাথে এটি আমার কাছে মুখ্য সমস্যা বলে মনে হচ্ছে এটি হল যে আপনি এখানে যে পদ্ধতিগুলি দেখান সেগুলি কেন ব্যবহার করা উচিত তা আপনি ব্যাখ্যা করেন না । আপনার প্রস্তাবিত সমাধানগুলির আমি কোনও ব্যবহার করব না কারণ সেগুলি গৃহীত উত্তরের সমাধানগুলির চেয়ে আরও খারাপ। উদাহরণস্বরূপ, দস্তাবেজের আপনার রেফারেন্স Object.setPrototypeOfসতর্ক করে যে এটি একটি "খুব ধীরগতি সম্পন্ন অপারেশন"। কেন পৃথিবীতে আমি এটিকে ব্যবহার করব Array.prototype.slice.call?
লুই

লুইস প্রতিটি পদ্ধতির ব্যাখ্যা সহ উত্তর আপডেট করেছেন। ওপিতে প্রশ্নটি মনে হয় "মানক গ্রন্থাগারটি ব্যবহার করে এটি করার কোনও অন্তর্নির্মিত উপায় আছে কি?" , অন্তর্নির্মিত "কেন কোনও পদ্ধতি ব্যবহার করা উচিত" নয় ? উত্তর পোস্ট করা কোনও ব্যবহারকারী কীভাবে সঠিকভাবে নির্ধারণ করতে পারে যে পোস্ট সমাধানগুলি ওপির জন্য "সঠিক"? দেখে মনে হবে এটি নির্ধারণ করা কি ওপরের কাজ? প্রকৃতপক্ষে, বিজ্ঞপ্তির এই অংশটি এই ব্যবহারকারীর আগ্রহী: "আপনার উত্তর কেন ঠিক আছে তা ব্যাখ্যা করুন" । এই প্রশ্নের উত্তরের যে কোনও উত্তর দেওয়া হয়েছে: "এই উত্তরটি" সঠিক "কারণ: x, y, z"?
অতিথি 271314

আমি যা বুঝিয়েছি তা হল কীভাবে সাধারণত কাজ করে। অপরটি কেন অন্য সমাধানের চেয়ে আরও ভাল, তা ওপি জানতে চায় কিনা তা সম্পূর্ণ অপ্রাসঙ্গিক, কারণ এসও-র জন্য পোস্ট করা প্রশ্নগুলি মূলত ওপি-র জন্য নয়, প্রশ্ন এবং এর উত্তরগুলি পরে পড়বে এমন কয়েক'শ এবং হাজার হাজার লোকের জন্য। এছাড়াও, যে লোকেরা উত্তরে ভোট দেয় তাদের ওপি যা সন্তুষ্ট হতে পারে তার অনুযায়ী ভোট দেওয়ার প্রয়োজন হয় না।
লুই

1

এখানে একটি পরিষ্কার এবং সংক্ষিপ্ত সমাধান:

function argsToArray() {
  return Object.values(arguments);
}

// example usage
console.log(
  argsToArray(1, 2, 3, 4, 5)
  .map(arg => arg*11)
);

Object.values( )একটি অ্যারে হিসাবে একটি বস্তুর মান ফিরে আসবে এবং যেহেতু argumentsএকটি বস্তু, এটা মূলত রূপান্তর করবে argumentsএকটি অ্যারের মধ্যে, এইভাবে যেমন একটি অ্যারে এর সাহায্যকারী ফাংশন সব সঙ্গে আপনি প্রদান map, forEach, filter, ইত্যাদি


0

বেনশার্ক 3 পদ্ধতি:

function test()
{
  console.log(arguments.length + ' Argument(s)');

  var i = 0;
  var loop = 1000000;
  var t = Date.now();
  while(i < loop)
  {
      Array.prototype.slice.call(arguments, 0); 
      i++;
  }
  console.log(Date.now() - t);


  i = 0,
  t = Date.now();
  while(i < loop)
  {
      Array.apply(null, arguments);
      i++;
  }
  console.log(Date.now() - t);

  i = 0,
  t = Date.now();
  while(i < loop)
  {
      arguments.length == 1 ? [arguments[0]] : Array.apply(null, arguments);
      i++;
  }
  console.log(Date.now() - t);
}

test();
test(42);
test(42, 44);
test(42, 44, 88, 64, 10, 64, 700, 15615156, 4654, 9);
test(42, 'truc', 44, '47', 454, 88, 64, '@ehuehe', 10, 64, 700, 15615156, 4654, 9,97,4,94,56,8,456,156,1,456,867,5,152489,74,5,48479,89,897,894,894,8989,489,489,4,489,488989,498498);

ফলাফল?

0 Argument(s)
256
329
332
1 Argument(s)
307
418
4
2 Argument(s)
375
364
367
10 Argument(s)
962
601
604
40 Argument(s)
3095
1264
1260

উপভোগ করুন!


1
ভালো কিছু করার জন্য পরিবর্তিত হবে সেটির পরামর্শ করতে চান arguments.length == 1?[arguments[0]]:Array.apply(null, arguments);ফাংশন প্রতিরোধ শুধুমাত্র একটি পূর্ণসংখ্যা আর্গুমেন্ট সহ বলা হয় dummyFn(3)এবং কারণ ফল[,,]
কিছু মনে করবেন না

@ সার্বক্ষণিক ভাল কাজ, আমি সম্পাদনা করি, আপনার সংস্করণটি আরও ভাল;) তবে আমি বুঝতে পারি না dummyFn(3)এটি কী? এই ফাংশনটি বিদ্যমান নেই ...
ম্যাট্রিক্স

উহ ... কিছু মনে করবেন না, কেবল একটি উদাহরণ দেখাতে চায় যে কীভাবে একটি ফাংশন কেবলমাত্র একটি পূর্ণসংখ্যার যুক্তি দিয়ে ডাকা হয় এবং একটি নির্দিষ্ট আকারের খালি অ্যারে তৈরি করে, আমার ইংরাজির জন্য দুঃখিত।
কিছু মনে করবেন না


0

যদিও বিশ্রামের প্যারামিটারগুলি ভালভাবে কাজ করে, আপনি যদি argumentsকোনও কারণে ব্যবহার চালিয়ে যেতে চান তবে বিবেচনা করুন

function sortArgs() {
  return [...arguments].sort()
}

[...arguments] বিকল্প এক ধরণের বিবেচনা করা যেতে পারে Array.from(arguments) , যা পুরোপুরি ভালভাবে কাজ করে।

একটি ES7 বিকল্প একটি অ্যারে উপলব্ধি:

[for (i of arguments) i].sort()

আপনি যদি বাছাইয়ের আগে যুক্তিগুলি প্রক্রিয়া করতে বা ফিল্টার করতে চান তবে এটি সবচেয়ে সহজ হতে পারে:

[for (i of arguments) if (i % 2) Math.log(i)].sort()

0
 function x(){
   var rest = [...arguments]; console.log(rest);return     
   rest.constructor;
 };
 x(1,2,3)

আমি সাধারণ ধ্বংসাত্মক কৌশল চেষ্টা করেছিলাম


0

আর্গুমেন্টস অবজেক্টটি কেবল একটি ফাংশন বডির ভিতরেই উপলব্ধ। আপনি যদি অ্যারের মতো আর্গুমেন্টস অবজেক্টটি ইনডেক্স করতে পারেন তবে এটি অ্যারে নয়। এটির দৈর্ঘ্য ব্যতীত অন্য কোনও অ্যারে বৈশিষ্ট্য নেই।

// function arguments length 5
function properties(a,b,c,d,e){
var function_name= arguments.callee.name
var arguments_length= arguments.length;
var properties_length=  properties.length; 
var function_from= properties.caller.name;
console.log('I am the function name: '+ function_name);
console.log('I am the function length, I am function spacific: '+ properties_length); 
console.log('I am the arguments length, I am context/excution spacific: '+ arguments_length);
console.log('I am being called From: '+  function_from );
}

// arguments 3
function parent(){
properties(1,2,3);
}

//arguments length 3 because execution spacific
parent();

যদিও এটি একটি অ্যারের মতো সূচিযুক্ত হতে পারে যেমন আপনি এই উদাহরণে দেখতে পারেন:

function add(){

var sum=0;

for(var i=0; i< arguments.length;i++){

sum = sum + arguments[i];

}

return sum;

}

console.log(add(1,2,3));

তবে আর্গুমেন্টস অবজেক্টটি অ্যারে নয় এবং দৈর্ঘ্য ব্যতীত অন্য কোনও বৈশিষ্ট্য নেই।

আপনি আর্গুমেন্ট অবজেক্টকে একটি অ্যারেতে রূপান্তর করতে পারেন যেখানে আপনি আর্গুমেন্ট অবজেক্টটি অ্যাক্সেস করতে পারেন।

ফাংশন বডিটির ভিতরে আপনি আর্গুমেন্ট অবজেক্টে অ্যাক্সেস করতে পারেন এমন অনেকগুলি উপায় রয়েছে এবং এর মধ্যে রয়েছে:

  1. আপনি অ্যারে.প্রোটোটাইপ.স্লাইস.কল পদ্ধতিতে কল করতে পারেন।

Array.prototype.slice.call (আর্গুমেন্ট)

function giveMeArgs(arg1,arg2){

var args = Array.prototype.slice.call(arguments);
return args
}

console.log( giveMeArgs(1,2));

  1. আপনি অ্যারে আক্ষরিক ব্যবহার করতে পারেন

[] .Slice.call (আর্গুমেন্ট)।

function giveMeArgs(arg1,arg2){

var args = [].slice.call(arguments);

return args;

}

console.log( giveMeArgs(1,2) );

  1. আপনি বিশ্রাম ব্যবহার করতে পারেন ...

function giveMeArgs(...args){

return args;

}

console.log(giveMeArgs(1,2))

  1. আপনি স্প্রেড ব্যবহার করতে পারেন [...]

function giveMeArgs(){

var args = [...arguments];
return args;

}

console.log(giveMeArgs(1,2));

  1. আপনি অ্যারে.ফর্ম () ব্যবহার করতে পারেন

function giveMeArgs(){

var args = Array.from(arguments);

return args;

}

console.log(giveMeArgs(1,2));


0

এটি কোনও আর্গুমেন্ট দিয়ে এটি করতে পুনরায় ব্যবহারযোগ্য ফাংশন তৈরি করতে পারেন, সহজতমটি হ'ল এইরকম:

function sortArgs() {
  return [...arguments].sort();
}

sortArgs('ali', 'reza', 1, 2, 'a'); //[1, 2, "a", "ali", "reza"];

ES6 এবং তারপরে স্প্রেড সিনট্যাক্স ব্যবহার করা যেতে পারে ...

তবে আপনি যদি ES5 এর সাথে সামঞ্জস্যপূর্ণ কিছু ব্যবহার করতে চান এবং নীচে ব্যবহার করতে পারেন Array.prototype.slice.callতবে আপনার কোডটি দেখতে এমন দেখাচ্ছে:

function sortArgs() {
  return Array.prototype.slice.call(arguments).sort();
}

sortArgs('ali', 'reza', 1, 2, 'a'); //[1, 2, "a", "ali", "reza"];

এটি করার জন্য আরও কয়েকটি উপায় রয়েছে, উদাহরণস্বরূপ যুক্তিগুলি ব্যবহার করে Array.fromবা লুপ করুন এবং তাদেরকে একটি নতুন অ্যারেতে নিয়োগ করুন ...


-2

এটি খুব পুরানো প্রশ্ন, তবে আমি মনে করি আমার কাছে এমন একটি সমাধান রয়েছে যা পূর্ববর্তী সমাধানগুলির তুলনায় টাইপ করা কিছুটা সহজ এবং বাহ্যিক লাইব্রেরিতে নির্ভর করে না:

function sortArguments() {
  return Array.apply(null, arguments).sort();
}

2
Array.applyআপনার যদি কেবল একটি একক ধনাত্মক পূর্ণসংখ্যার যুক্তি থাকে তা কাজ করবে না। এটি new Array(3)একটি অ্যারে দৈর্ঘ্য তৈরি করে কারণ 3। আরও সুনির্দিষ্ট হওয়ার জন্য ফলাফলটি হবে [undefined, undefined, undefined]এবং হবে না [3]
inf3rno
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.