[]
একটি অ্যারে হয়।
এই অ্যারেটি মোটেই ব্যবহৃত হয় না।
এটি পৃষ্ঠাতে রাখা হচ্ছে, কারণ অ্যারে ব্যবহার করা আপনাকে অ্যারে প্রোটোটাইপগুলিতে অ্যাক্সেস দেয় .forEach
।
এটি টাইপিংয়ের চেয়ে খুব দ্রুত Array.prototype.forEach.call(...);
এর পরে, forEach
একটি ফাংশন যা ইনপুট হিসাবে একটি ফাংশন নেয় ...
[1,2,3].forEach(function (num) { console.log(num); });
... এবং প্রতিটি উপাদানের জন্য this
(যেখানে this
অ্যারে-এর মতো রয়েছে, এতে এটি রয়েছে length
এবং আপনি এর অংশগুলি যেমন অ্যাক্সেস করতে পারেন this[1]
) এটি তিনটি জিনিস পাস করবে:
- অ্যারের মধ্যে উপাদান
- উপাদানটির সূচক (তৃতীয় উপাদানটি পাস হবে
2
)
- অ্যারের একটি রেফারেন্স
শেষ পর্যন্ত, .call
এটি একটি প্রোটোটাইপ যা ফাংশনগুলি থাকে (এটি একটি ফাংশন যা অন্য ফাংশনগুলির জন্য ডাকে)। এটি প্রথম যুক্তি হিসাবে গ্রহণ করবে এবং প্রথম তর্ক হিসাবে আপনি যা যা করেছেন তার সাথে নিয়মিত ফাংশনটির অভ্যন্তর
.call
প্রতিস্থাপন করবে ( বা " প্রতিদিনের জেএসে ব্যবহার করবে , বা আপনি যা যা করেছেন তা হবে" কঠোর মোডে "থাকলে)। বাকি আর্গুমেন্টগুলি মূল ফাংশনে পাস করা হবে। this
call
undefined
null
window
[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"
অতএব, আপনি forEach
ফাংশনটি কল করার জন্য একটি দ্রুত উপায় তৈরি করছেন , এবং আপনি this
খালি অ্যারে থেকে সমস্ত <a>
ট্যাগের একটি তালিকাতে পরিবর্তন করছেন এবং প্রতিটি <a>
ক্রম অনুসারে আপনি প্রদত্ত ফাংশনটি কল করছেন।
সম্পাদনা
লজিকাল উপসংহার / পরিষ্কার
নীচে, একটি নিবন্ধের লিঙ্কটি রয়েছে যাতে বোঝা যায় যে আমরা কার্যকরী প্রোগ্রামিংয়ের চেষ্টাগুলি স্ক্র্যাপ করি এবং প্রতিবার ম্যানুয়াল, ইনলাইন লুপিংয়ের সাথে লেগে থাকি কারণ এই সমাধানটি হ্যাক-ইশ এবং কদর্য।
আমি বলতে চাই যে .forEach
তার চেহারা থেকে কম সহায়ক, .map(transformer)
, .filter(predicate)
, .reduce(combiner, initialValue)
, এটা এখনও কাজগুলি করে যখন সমস্ত আপনি কি সত্যিই কাজ করতে চান বহির্বিশ্বের (না অ্যারে), এন-বার সংশোধন, যখন উভয় ব্যবহার করতে পারছে arr[i]
বা i
।
সুতরাং আমরা কীভাবে এই বৈষম্যকে মোকাবিলা করব, যেহেতু মোটো স্পষ্টভাবে একজন প্রতিভাবান এবং জ্ঞানবান লোক, এবং আমি কল্পনা করতে চাই যে আমি জানি আমি কী করছি / কোথায় যাচ্ছি (এখন এবং তার পরে ... ... অন্যান্য এটি প্রথম বারের প্রথম শেখা)?
উত্তরটি আসলে বেশ সহজ, এবং আঙ্কেল বব এবং স্যার ক্রকফোর্ড উভয়ের মুখোমুখি হবে, তদারকির কারণে:
এটা পরিষ্কার ।
function toArray (arrLike) { // or asArray(), or array(), or *whatever*
return [].slice.call(arrLike);
}
var checked = toArray(checkboxes).filter(isChecked);
checked.forEach(listValues);
এখন আপনি যদি এটি জিজ্ঞাসা করছেন যে আপনার এটি করা দরকার কিনা, আপনি নিজেই উত্তরটি উত্তম হতে পারে না ...
এই সঠিক জিনিসটি আজকাল উচ্চতর অর্ডার বৈশিষ্ট্যযুক্ত প্রতিটি ...?
আপনি যদি লোড্যাশ বা আন্ডারস্কোর বা এমনকি jQuery ব্যবহার করেন তবে সেগুলি সমস্ত উপাদানগুলির একটি সেট নেওয়ার এবং এন-বার একটি ক্রিয়া সম্পাদন করার উপায় রয়েছে।
আপনি যদি এই জাতীয় জিনিস ব্যবহার না করে থাকেন তবে সর্বকথায় নিজের লেখা write
lib.array = (arrLike, start, end) => [].slice.call(arrLike, start, end);
lib.extend = function (subject) {
var others = lib.array(arguments, 1);
return others.reduce(appendKeys, subject);
};
ES6 (ES2015) এবং এর বাইরেও আপডেট
কেবলমাত্র একটি slice( )
/ array( )
/ ইত্যাদি সহায়ক পদ্ধতি যাঁরা অ্যারে ব্যবহার করে (যেমনটি করা উচিত) যেমন তালিকা ব্যবহার করতে চান তাদের জীবনকে সহজতর করে তুলছেন না, তবে তুলনামূলকভাবে নিকটবর্তী ES6 + ব্রাউজারগুলিতে অপারেশন করার বিলাসিতা রয়েছে এমন লোকদের জন্য ভবিষ্যতে বা বাবেলে "ট্রান্সপ্লাইং" এর আজ আপনার ভাষা অন্তর্নির্মিত রয়েছে যা এই ধরণের জিনিসটিকে অপ্রয়োজনীয় করে তোলে।
function countArgs (...allArgs) {
return allArgs.length;
}
function logArgs (...allArgs) {
return allArgs.forEach(arg => console.log(arg));
}
function extend (subject, ...others) { /* return ... */ }
var nodeArray = [ ...nodeList1, ...nodeList2 ];
সুপার-ক্লিন এবং খুব দরকারী।
দেখুন বিশ্রাম এবং ছড়িয়ে অপারেটার; বাবেলজেএস সাইটে এগুলি ব্যবহার করে দেখুন; যদি আপনার টেক স্ট্যাকটি যথাযথ হয় তবে এগুলিকে বাবেল এবং একটি বিল্ড স্টেপ সহ উত্পাদনে ব্যবহার করুন।
অ-অ্যারে থেকে আরেতে রূপান্তরটি ব্যবহার না করতে পারা করার কোনও উপযুক্ত কারণ নেই ... ... আপনার কোডটি এমন কোনও কুৎসিত লাইনটি পাস্টিং ব্যতীত আর কিছুই না করে গোলমাল করবেন না , সর্বত্র।