जवाबों:
(अपडेट: मेरा अन्य उत्तर यहां गैर- 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 में, आपके द्वारा चलाया जाने वाला एकमात्र ब्राउज़र forEach
IE8 नहीं है (और यह ठीक से नहीं हो सकता है पॉलीफ़िल्ड वहाँ, या तो)।
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; ...