जवाबों:
(अपडेट: मेरा अन्य उत्तर यहां गैर- jQuery विकल्पों को अधिक अच्छी तरह से व्याख्यायित करता है। नीचे दिया गया तीसरा विकल्प jQuery.eachहालांकि इसमें नहीं है।)
चार विकल्प:
var i;
for (i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
या ES2015 + में:
for (let i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
लाभ : सीधे-आगे, jQuery पर कोई निर्भरता, समझने में आसान, thisलूप के शरीर के भीतर के संरक्षण के साथ कोई समस्या नहीं, फ़ंक्शन कॉल का कोई अनावश्यक ओवरहेड (जैसे, सिद्धांत रूप में तेजी से, हालांकि वास्तव में आपके पास होगा इतने सारे तत्व हैं कि बाधाओं से आपको अन्य समस्याएं हैं; विवरण )।
forEach:ECMAScript5 के अनुसार, सरणियों का forEachउन पर एक फ़ंक्शन होता है जो सरणी के माध्यम से लूप को आसान बनाता है:
substr.forEach(function(item) {
// do something with `item`
});
(नोट: वहाँ अन्य कार्यों के बहुत सारे हैं, न सिर्फ forEach; देखने जवाब ऊपर संदर्भित जानकारी के लिए।)
लाभ : घोषणात्मक, यदि आपके पास एक काम है, तो इट्रेटर के लिए एक प्रीबिल्ट फ़ंक्शन का उपयोग कर सकते हैं, यदि आपका लूप बॉडी जटिल है तो फ़ंक्शन कॉल की स्कोपिंग कभी-कभी उपयोगी होती है, iजिसमें आपके स्कोप वाले चर की कोई आवश्यकता नहीं होती है।
नुकसान : यदि आप thisयुक्त कोड का उपयोग कर रहे हैं और आप thisअपने forEachकॉलबैक में उपयोग करना चाहते हैं , तो आपको A को इसे एक चर में रखना होगा ताकि आप इसे फ़ंक्शन के भीतर उपयोग कर सकें, B) इसे दूसरे तर्क के रूप में पास forEachकरें कॉलबैक के दौरान forEachइसे सेट thisकरें, या C) ES2015 + एरो फ़ंक्शन का उपयोग करें , जो बंद हो जाता है this। आप उन चीजों में से एक ऐसा नहीं करते हैं, कॉलबैक में thisहोगा undefinedया वैश्विक वस्तु ((सख्त मोड में) window) ढीला मोड में। एक दूसरा नुकसान हुआ करता forEachथा जो सार्वभौमिक रूप से समर्थित नहीं था, लेकिन यहां 2018 में, आपके द्वारा चलाया जाने वाला एकमात्र ब्राउज़र forEachIE8 नहीं है (और यह ठीक से नहीं हो सकता है पॉलीफ़िल्ड वहाँ, या तो)।
for-of:for (const s of substr) { // Or `let` if you want to modify it in the loop body
// do something with `s`
}
इस जवाब के शीर्ष पर जुड़ा हुआ विवरण देखें कि यह कैसे काम करता है।
लाभ : सरल, सीधा, सरणी से प्रविष्टि के लिए एक समांतर-स्कोप चर (या स्थिर, ऊपर) प्रदान करता है।
नुकसान : IE के किसी भी संस्करण में समर्थित नहीं है।
jQuery.each(substr, function(index, item) {
// do something with `item` (or `this` is also `item` if you like)
});
लाभ : जैसे forEachकि आप jQuery का उपयोग कर रहे हैं, वैसे ही सभी फायदे भी हैं।
नुकसान : यदि आप thisयुक्त कोड का उपयोग कर रहे हैं , तो आपको इसे एक चर में रखना होगा ताकि आप इसे फ़ंक्शन के भीतर उपयोग कर सकें, क्योंकि फ़ंक्शन के भीतर thisइसका अर्थ कुछ और है।
आप इस thisचीज़ से बच सकते हैं , या तो उपयोग करके $.proxy:
jQuery.each(substr, $.proxy(function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}, this));
... या Function#bind:
jQuery.each(substr, function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}.bind(this));
... या ES2015 ("ES6") में, एक तीर फ़ंक्शन:
jQuery.each(substr, (index, item) => {
// do something with `item` (`this` is the same as it was outside)
});
इसकेfor..in लिए उपयोग न करें (या यदि आप करते हैं, तो इसे उचित सुरक्षा उपायों के साथ करें)। आप लोगों को यह कहते हुए देखेंगे (वास्तव में, संक्षेप में यहाँ एक उत्तर था जो कह रहा है), लेकिन for..inवह ऐसा नहीं करता है जो कई लोग सोचते हैं कि यह करता है (यह कुछ और भी उपयोगी है!)। विशेष रूप से, for..inकिसी ऑब्जेक्ट के एन्यूमरेबल प्रॉपर्टी नामों (किसी एरे के इंडेक्स नहीं) के माध्यम से लूप करता है। चूंकि सरणियाँ ऑब्जेक्ट्स हैं, और डिफ़ॉल्ट रूप से उनके केवल एन्यूमरेबल प्रॉपर्टीज़ इंडेक्स हैं, यह ज्यादातर ब्लैंड परिनियोजन में काम करने की तरह लगता है। लेकिन यह एक सुरक्षित धारणा नहीं है कि आप इसके लिए इसका इस्तेमाल कर सकते हैं। यहाँ एक अन्वेषण है: http://jsbin.com/exohi/3
मुझे ऊपर "नहीं" नरम करना चाहिए। यदि आप विरल सरणियों के साथ काम कर रहे हैं (उदाहरण के लिए, सरणी में कुल 15 तत्व हैं, लेकिन उनके lengthअनुक्रम किसी कारण से 0 से 150,000 के बीच में बिखरे हुए हैं, और इसलिए 150,001 है), और यदि आप उपयुक्त सुरक्षा उपायों का उपयोग करते हैं hasOwnPropertyऔर जाँच कर रहे हैं संपत्ति का नाम वास्तव में संख्यात्मक है (ऊपर लिंक देखें), for..inअनावश्यक छोरों के बहुत से बचने के लिए एक पूरी तरह से उचित तरीका हो सकता है, क्योंकि केवल आबादी वाले अनुक्रमितों की गणना की जाएगी।
Function#bind। :-) अच्छा बिंदु, जोड़ा गया।
i++और ++iउस अभिव्यक्ति का परिणाम है, जिसका उपयोग ऊपर दिए गए उदाहरण में कभी नहीं किया गया है। एक forलूप इस तरह काम करता है: 1. इनिशियलाइज़ेशन, 2. टेस्ट (यदि गलत है तो समाप्त करें), 3. बॉडी, 4. अपडेट, 5. स्टेप पर लौटें 2. अपडेट एक्सप्रेशन का परिणाम किसी भी चीज़ के लिए उपयोग नहीं किया जाता है।
jQuery.each(array, callback)
सरणी पुनरावृत्ति
jQuery.each(array, function(Integer index, Object value){});
वस्तु पुनरावृत्ति
jQuery.each(object, function(string propertyName, object propertyValue){});
उदाहरण :
var substr = [1, 2, 3, 4];
$.each(substr , function(index, val) {
console.log(index, val)
});
var myObj = { firstName: "skyfoot"};
$.each(myObj, function(propName, propVal) {
console.log(propName, propVal);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
पाश के लिए
for (initialExpression; condition; incrementExpression)
statement
उदाहरण
var substr = [1, 2, 3, 4];
//loop from 0 index to max index
for(var i = 0; i < substr.length; i++) {
console.log("loop", substr[i])
}
//reverse loop
for(var i = substr.length-1; i >= 0; i--) {
console.log("reverse", substr[i])
}
//step loop
for(var i = 0; i < substr.length; i+=2) {
console.log("step", substr[i])
}
अंदर के लिए
//dont really wnt to use this on arrays, use it on objects
for(var i in substr) {
console.log(substr[i]) //note i returns index
}
के लिए
for(var i of subs) {
//can use break;
console.log(i); //note i returns value
}
प्रत्येक के लिए
substr.forEach(function(v, i, a){
//cannot use break;
console.log(v, i, a);
})
यहाँ jquery की कोई आवश्यकता नहीं है, बस एक forलूप काम करता है:
var substr = currnt_image_list.split(',');
for(var i=0; i< substr.length; i++) {
alert(substr[i]);
}
forलूपएक पारंपरिक- forलूप के तीन घटक हैं:
इन तीन घटकों को एक दूसरे से एक ;प्रतीक द्वारा अलग किया जाता है । इन तीन घटकों में से प्रत्येक के लिए सामग्री वैकल्पिक है, जिसका अर्थ है कि निम्नलिखित सबसे न्यूनतम forसंभव है:
for (;;) {
// Do stuff
}
बेशक, आपको चलने के लिए इसे पाने के लिए उस -loop के अंदर if(condition === true) { break; } या if(condition === true) { return; }कहीं एक को शामिल करना होगा for।
आमतौर पर, हालांकि, इनिशियलाइज़ेशन का उपयोग इंडेक्स को घोषित करने के लिए किया जाता है, इस शर्त का उपयोग उस इंडेक्स की न्यूनतम या अधिकतम मूल्य के साथ तुलना करने के लिए किया जाता है, और बाद में इंडेक्स को बढ़ाने के लिए उपयोग किया जाता है:
for (var i = 0, length = 10; i < length; i++) {
console.log(i);
}
forएक सरणी के माध्यम से लूप के लिए एक पारंपरिक- लूप का उपयोग करनाएक सरणी के माध्यम से लूप करने का पारंपरिक तरीका यह है:
for (var i = 0, length = myArray.length; i < length; i++) {
console.log(myArray[i]);
}
या, यदि आप पीछे की ओर लूप करना पसंद करते हैं, तो आप ऐसा करते हैं:
for (var i = myArray.length - 1; i > -1; i--) {
console.log(myArray[i]);
}
हालाँकि, कई बदलाव संभव हैं, जैसे कि। यह वाला :
for (var key = 0, value = myArray[key], var length = myArray.length; key < length; value = myArray[++key]) {
console.log(value);
}
... या यह एक ...
var i = 0, length = myArray.length;
for (; i < length;) {
console.log(myArray[i]);
i++;
}
... या यह एक:
var key = 0, value;
for (; value = myArray[key++];){
console.log(value);
}
जो भी सबसे अच्छा काम करता है वह काफी हद तक व्यक्तिगत स्वाद और आपके द्वारा लागू किए जाने वाले विशिष्ट उपयोग के मामले में होता है।
ध्यान दें :इन भिन्नताओं में से प्रत्येक को सभी ब्राउज़रों द्वारा समर्थित किया जाता है, जिसमें पुराने वाले भी शामिल हैं!
while-लूपfor-लूप का एक विकल्प एक लूप है while। सरणी के माध्यम से लूप करने के लिए, आप ऐसा कर सकते हैं:
var key = 0;
while(value = myArray[key++]){
console.log(value);
}
ध्यान दें :
पारंपरिक- forफ्लॉप की तरह , while-लूप्स ब्राउज़रों के सबसे पुराने द्वारा भी समर्थित हैं।
इसके अलावा, हर forलूप को एक लूप के रूप में फिर से लिखा जा सकता है । उदाहरण के लिए, while-loop hereabove इस -loop के समान ही व्यवहार करता है for:
for(var key = 0;value = myArray[key++];){
console.log(value);
}
for...inऔरfor...ofजावास्क्रिप्ट में, आप यह भी कर सकते हैं:
for (i in myArray) {
console.log(myArray[i]);
}
हालांकि, इसका उपयोग सावधानी के साथ किया जाना चाहिए, क्योंकि यह forसभी मामलों में ट्रेडिटनल- लूप के समान व्यवहार नहीं करता है , और संभावित साइड-इफेक्ट्स हैं जिन पर विचार करने की आवश्यकता है। देखें क्यों "इट्स ... इन" एरे इटरेशन के साथ एक बुरे विचार का उपयोग कर रहा है? अधिक जानकारी के लिए।
एक विकल्प के रूप में for...in, अब के लिए भी है for...of। निम्नलिखित उदाहरण एक for...ofलूप और लूप के बीच अंतर को दर्शाता है for...in:
var myArray = [3, 5, 7];
myArray.foo = "hello";
for (var i in myArray) {
console.log(i); // logs 0, 1, 2, "foo"
}
for (var i of myArray) {
console.log(i); // logs 3, 5, 7
}
ध्यान दें :
आपको यह भी विचार करने की आवश्यकता है कि इंटरनेट एक्सप्लोरर का कोई भी संस्करण for...of( एज 12+ नहीं करता है) और for...inइसके लिए कम से कम IE10 की आवश्यकता होती है।
Array.prototype.forEach()For-लूप का एक विकल्प है Array.prototype.forEach(), जो निम्नलिखित सिंटैक्स का उपयोग करता है:
myArray.forEach(function(value, key, myArray) {
console.log(value);
});
ध्यान दें :
Array.prototype.forEach() सभी आधुनिक ब्राउज़रों द्वारा समर्थित है, साथ ही IE9 +।
jQuery.each()इसके अलावा उल्लिखित चार अन्य विकल्पों में, jQuery की भी अपनी foreachभिन्नता थी।
यह निम्नलिखित सिंटैक्स का उपयोग करता है:
$.each(myArray, function(key, value) {
console.log(value);
});
each()JQuery के फ़ंक्शन का उपयोग करें ।
यहाँ एक उदाहरण है:
$.each(currnt_image_list.split(','), function(index, value) {
alert(index + ': ' + value);
});
JQuery का उपयोग करें each()। अन्य तरीके हैं लेकिन प्रत्येक को इस उद्देश्य के लिए डिज़ाइन किया गया है।
$.each(substr, function(index, value) {
alert(value);
});
और अंतिम संख्या के बाद अल्पविराम न लगाएं।
तीर फ़ंक्शन और प्रक्षेप के साथ ES6 सिंटैक्स:
var data=["a","b","c"];
$(data).each((index, element) => {
console.log(`current index : ${index} element : ${element}`)
});
इसे इस्तेमाल करे:
$.grep(array, function(element) {
})
साइड इफेक्ट के साथ सरणी / स्ट्रिंग के माध्यम से पुनरावृत्ति के वैकल्पिक तरीके
var str = '21,32,234,223';
var substr = str.split(',');
substr.reduce((a,x)=> console.log('reduce',x), 0) // return undefined
substr.every(x=> { console.log('every',x); return true}) // return true
substr.some(x=> { console.log('some',x); return false}) // return false
substr.map(x=> console.log('map',x)); // return array
str.replace(/(\d+)/g, x=> console.log('replace',x)) // return string
.each()याfor...inलूप करना सामान्य रूप से एक बुरा विचार है। यह उम्र का उपयोग करने की तुलना में धीमी हैforया की तरह हैwhile। एक का उपयोग करते हुएfor loopकैश करने के लिए यह भी एक बहुत अच्छा विचारlengthपाशन से पहले संपत्ति।for (var i = 0, len = substr.length; i < len; ...