ইকামাস্ক্রিপ্ট।
আপনি যদি ES6 ব্যবহার করছেন তবে আপনি আইটেমগুলির একটি অ্যারে তৈরি করতে এবং ব্যবহার করতে পারেন includes
:
['a', 'b', 'c'].includes('b')
এই কিছু সহজাত বেনিফিট আছে indexOf
কারণ এটি সঠিকভাবে উপস্থিতি পরীক্ষা করতে পারেন NaN
তালিকায় এবং এই ধরনের মধ্যে মধ্যম এক হিসাবে অনুপস্থিত অ্যারে উপাদানের মেলাতে পারে [1, , 2]
থেকে undefined
। জাভাস্ক্রিপ্ট টাইপ করা অ্যারে যেমন includes
কাজ করে ।Uint8Array
আপনি যদি ব্রাউজার সমর্থন সম্পর্কে উদ্বিগ্ন হন (যেমন আইই বা এজ হিসাবে) তবে আপনি CanIUse.Com এ চেকArray.includes
করতে পারেন এবং যদি আপনি ব্রাউজার বা ব্রাউজারের যে সংস্করণটি অনুপস্থিত রয়েছে তা লক্ষ্য করতে চান includes
, তবে আমি পলিফিলিংয়ের জন্য পলিফিল.ওয়ের প্রস্তাব দিই।
আন অ্যারে ছাড়াই
আপনি নীচে isInList
স্ট্রিংগুলিতে একটি নতুন সম্পত্তি যুক্ত করতে পারেন :
if (!String.prototype.isInList) {
String.prototype.isInList = function() {
let value = this.valueOf();
for (let i = 0, l = arguments.length; i < l; i += 1) {
if (arguments[i] === value) return true;
}
return false;
}
}
তারপরে এটির মতো ব্যবহার করুন:
'fox'.isInList('weasel', 'fox', 'stoat') // true
'fox'.isInList('weasel', 'stoat') // false
আপনি একই জিনিস করতে পারেন Number.prototype
।
Array.indexOf
আপনি যদি কোনও আধুনিক ব্রাউজার ব্যবহার করছেন তবে indexOf
সর্বদা কাজ করে। যাইহোক, আইই 8 এবং এর আগে আপনার পলিফিল লাগবে।
যদি indexOf
-1 প্রদান করে তবে আইটেমটি তালিকায় নেই। যদিও মনে রাখবেন যে এই পদ্ধতিটি সঠিকভাবে যাচাই করবে না NaN
এবং এটি একটি স্পষ্টর সাথে মেলে তবে এটি undefined
কোনও অনুপস্থিত উপাদানটির সাথে undefined
অ্যারের মতো মেলে না [1, , 2]
।
আইই indexOf
বা includes
এর জন্য পলিফিল বা অন্য কোনও ব্রাউজার / সংস্করণ সমর্থনটির অভাব রয়েছে
আপনি যদি উপরে উল্লিখিত হিসাবে পলিফিল.ইওয়ের মতো পরিষেবা ব্যবহার করতে না চান তবে আপনি সর্বদা আপনার নিজস্ব উত্স কোডের মান অনুসারে কাস্টম পলিফিলস অন্তর্ভুক্ত করতে পারেন। উদাহরণস্বরূপ, মজিলা বিকাশকারী নেটওয়ার্কের একটি রয়েছে indexOf
।
এই পরিস্থিতিতে যেখানে আমাকে ইন্টারনেট এক্সপ্লোরার 7 এর জন্য একটি সমাধান করতে হয়েছিল, আমি indexOf()
মানক-অনুবর্তী নয় এমন ফাংশনটির সহজ সংস্করণটি "আমার নিজের" ঘূর্ণিত করেছি :
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(item) {
var i = this.length;
while (i--) {
if (this[i] === item) return i;
}
return -1;
}
}
তবে, আমি মনে করি না যে Array.prototype
দীর্ঘমেয়াদে সংশোধন করা সবচেয়ে ভাল উত্তর। জাভাস্ক্রিপ্টে সংশোধন করা Object
ও Array
প্রোটোটাইপগুলি গুরুতর বাগগুলি হতে পারে। আপনার নিজের পরিবেশে এটি করা নিরাপদ কিনা তা আপনাকে সিদ্ধান্ত নিতে হবে। প্রাথমিক নোটের মধ্যে হ'ল একটি অ্যারের পুনরুক্তি করা (যখন অ্যারে.প্রোটোটাইপ বৈশিষ্ট্য যুক্ত করেছে) for ... in
নতুন ফাংশনটির নামটি কীগুলির মধ্যে একটি হিসাবে ফিরিয়ে দেবে:
Array.prototype.blah = function() { console.log('blah'); };
let arr = [1, 2, 3];
for (let x in arr) { console.log(x); }
// Result:
0
1
2
blah // Extra member iterated over!
আপনার কোডটি এখনই কাজ করতে পারে তবে ভবিষ্যতে কেউ তৃতীয় পক্ষের জাভাস্ক্রিপ্ট লাইব্রেরি বা প্লাগইন যুক্ত করবেন যা উত্তরাধিকারসূত্রে প্রাপ্ত কীগুলির বিরুদ্ধে উদ্যোগীভাবে রক্ষা করছে না, সমস্ত কিছু ভেঙে যেতে পারে।
সেই ভাঙ্গন এড়াতে পুরানো উপায় হ'ল গণনার সময় প্রতিটি মান পরীক্ষা করে দেখতে হবে যে বস্তুটির আসলে এটি উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তি হিসাবে আছে কিনা if (arr.hasOwnProperty(x))
এবং কেবল তখনই এটির সাথে কাজ করবে x
।
এই অতিরিক্ত-কী সমস্যাটি এড়াতে নতুন ES6 উপায়টি , এর of
পরিবর্তে ব্যবহার করা । তবে আপনি যদি এই গ্যারান্টি দিতে না পারেন যে আপনার সমস্ত কোড এবং তৃতীয় পক্ষের গ্রন্থাগারগুলি এই পদ্ধতির সাথে কঠোরভাবে আটকে রয়েছে, তবে এই প্রশ্নের প্রয়োজনে আপনি সম্ভবত উপরে বর্ণিত হিসাবে ব্যবহার করতে চাইবেন ।in
for (let x of arr)
includes