[]
एक सरणी है।
इस सरणी का उपयोग बिल्कुल नहीं किया जाता है।
इसे पृष्ठ पर डाला जा रहा है, क्योंकि एक सरणी का उपयोग करने से आपको सरणी प्रोटोटाइप की तरह पहुंच मिलती है, जैसे .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 का उपयोग कर रहे हैं, तो वे सभी तत्वों का एक सेट लेने का एक तरीका होने जा रहे हैं, और एक एन-टाइम का प्रदर्शन कर रहे हैं।
यदि आप इस तरह की चीज का उपयोग नहीं कर रहे हैं, तो हर तरह से, अपना खुद का लिखें।
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( )
/ आदि सहायक विधि उन लोगों के लिए जीवन को आसान बनाने जा रही है जो सूचियों का उपयोग करना चाहते हैं, जैसे वे सरणियों का उपयोग करते हैं (जैसा कि उन्हें चाहिए), लेकिन उन लोगों के लिए जो अपेक्षाकृत के ईएस 6+ ब्राउज़रों में परिचालन की विलासिता रखते हैं भविष्य में, या बबेल में "ट्रांसप्लिंग" के रूप में, आज आपके पास भाषा में निर्मित विशेषताएं हैं, जो इस प्रकार की चीज़ को अनावश्यक बनाती हैं।
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 ];
सुपर-क्लीन, और बहुत उपयोगी है।
को फिर से देखें रेस्ट और फैले ऑपरेटरों; BabelJS साइट पर उन्हें आज़माएं; यदि आपका तकनीकी स्टैक क्रम में है, तो उन्हें बेबल के साथ उत्पादन और एक निर्माण चरण में उपयोग करें।
गैर-सरणी से सरणी में परिवर्तन का उपयोग करने में सक्षम नहीं होने का कोई अच्छा कारण नहीं है ... ... बस अपने कोड की गड़बड़ी कुछ भी नहीं कर रही है, लेकिन उसी बदसूरत रेखा को चिपकाने, हर जगह।