के रूप में दूसरों का उल्लेख किया है, यह "सरणी comprehensions" कहा जाता है और यह कई में से एक है, कई सुविधाओं ECMAScript सद्भाव के लिए सुझाव:
http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions
हालांकि, काफी हर सद्भाव "सुविधा" के साथ के रूप में , मुझे नहीं लगता कि इस बारे में कोई वास्तविक धारणा है कि क्या इसे वास्तव में अंतिम रिलीज में शामिल किया जा रहा है या नहीं। आप इसे "जावास्क्रिप्ट 1.7" (एक नेबुलस "मानक" विनिर्देश "के हिस्से के रूप में फ़ायरफ़ॉक्स में उपयोग कर सकते हैं, वास्तव में केवल मोज़िला-आधारित सामग्री पर लागू होता है); हालांकि, आप एफएफ-विशिष्ट वाक्यविन्यास से बचने से बेहतर हैं, खासकर जब यह अन्य ब्राउज़रों में सिंटैक्स त्रुटियों का कारण बनता है।
आप "ऐरे समझ" के लिए Google खोज करके इसके बारे में अधिक पढ़ सकते हैं, लेकिन जैसा कि मैंने उल्लेख किया है, यह मोज़िला-विशिष्ट प्रकृति के कारण यह एक बहुत ही उपयोगी टूल नहीं है।
आप reduce()
सरणी विधि ES5 में शुरू का उपयोग कर भी बहुत कुछ कोड के बिना एक समान प्रभाव को प्राप्त कर सकते हैं:
//JavaScript has no "range" function, so let's make one
var range = function (begin, length) {
var i, ret = [];
for (i = begin; i < begin + length; i++) {
ret.push(i);
}
return ret;
};
var evens = range(0, 21).reduce(function (arr, cur) {
if (cur % 2 === 0) arr.push(cur);
return arr;
}, []);
हो सकता है यही कारण है कि एक छोटे से वर्बोज़ की तुलना में क्या आप के लिए (यहां तक कि ध्यान में रखते हुए देख रहे थे कि हम range()
फ़ंक्शन बनाना था)। लेकिन यह अपेक्षाकृत कॉम्पैक्ट समाधान है जिसके लिए बहुत सारे "सेटअप" की आवश्यकता नहीं होती है और मुख्य रूप से समस्या को हल करने के लिए चिपक जाती है: एक सरणी से तत्वों को दूसरी सरणी बनाने के लिए फ़िल्टर करना।
मैं इसे एक लाइनर में कम करने में सक्षम था, लेकिन यह बनाए रखने के लिए थोड़ा असहज हो गया, इसलिए मैंने इसके बजाय दो लाइन संस्करण का सुझाव देने का फैसला किया।यदि आप एक लाइनर में दिलचस्पी रखते हैं, तो यहां यह है:
//Don't forget to define "range()"
var evens = range(0, 21).reduce(function (arr, cur) {
return (cur % 2 === 0) ? (arr.push(cur) && arr) : arr;
}, []);
फिर, यह ES5 कोड है। यदि आप पुराने ब्राउज़र में काम करना चाहते हैं, तो आपको Array.reduce()
के लिए समर्थन प्रदान करने के लिए एक शिम के साथ आने की आवश्यकता होगी। MDN यहाँ एक है:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce
अद्यतन:
ऐसा लगता है कि मैं filter()
बजाय reduce()
इस्तेमाल किया जाना चाहिए था। कोड को अधिक क्लीनर बनाता है। सुझाव देने के लिए ओपी के लिए धन्यवाद!
var evens = range(0,21).filter(function (cur) { return cur % 2 === 0; });
फिर, filter()
ES5 है, तो आप क्रम में एक शिम की आवश्यकता होगी सुनिश्चित करने के लिए यह पुराने ब्राउज़र पर ठीक ढंग से काम नहीं है।
_ "इस तरह के वाक्यविन्यास का वर्णन करने के लिए क्या नाम दिया जाएगा?" _ - जो लेख आपने लिंक किया है उसे "ऐरे समझ" कहते हैं। – nnnnnn
मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि यह शब्द किसी सरणी भाग के अंदर 'प्रत्येक के लिए' का जिक्र कर रहा था। मुझे लगता है कि मैंने इस अलग-अलग 'if' वाक्यविन्यास को सरणी के बाहर इस्तेमाल किया है, लेकिन मुझे यकीन नहीं है। ? –
_ केवल सरणी समझ को और अधिक कॉम्पैक्ट नहीं है, लेकिन यह वास्तव में पढ़ने के लिए आसान है, ** एक बार जब आप अवधारणा से परिचित हो जाते हैं ** ._ मैं केवल एक बार इसका उपयोग करने की हिम्मत करता हूं, मुझे यकीन है कि हर कोई सिंटैक्स जानता है। रखरखाव एक हिंसक मनोचिकित्सक है और सभी ... – Laoujin