2011-09-24 9 views
5

के साथ जावास्क्रिप्ट में किसी ऑब्जेक्ट पर पुनरावृत्ति कैसे करें मैं एक प्लेलिस्ट सिस्टम बना रहा हूं जहां प्रत्येक गीत में एक अद्वितीय आईडी होती है। जब आप प्लेलिस्ट सरणी में कोई गीत जोड़ते हैं, तो इसकी अनुक्रमणिका इसकी आईडी के रूप में पंजीकृत होती है।एक अनियंत्रित अनुक्रमणिका

आम तौर पर जब जावास्क्रिप्ट सरणी पर लूपिंग करते हैं, तो आप लंबाई लेते हैं और इंडेक्स के माध्यम से गिनते हैं। अप्रयुक्त अनुक्रमणिका के साथ एक सरणी के माध्यम से लूप करने का कोई तरीका है? क्या किसी भी कारण से यह बुरा अभ्यास है?

+0

सभी जावास्क्रिप्ट सरणी सहयोगी हैं, आपको गिनती सूचकांक का उपयोग करने की आवश्यकता नहीं है। – Perception

+0

@ धारणा: बकवास। जावास्क्रिप्ट 'ऐरे के अनुक्रमिक, संख्यात्मक सूचकांक हैं। शायद आप अधिक सामान्य वस्तुओं का जिक्र कर रहे हैं। एक आम त्रुटि। –

+0

@ धारणा वास्तव में कोई ऐरे या एसोसिएटिव ऐरे जैसी कोई चीज़ नहीं है। सभी वस्तुओं वस्तुतः हैशटेबल्स हैं। जावास्क्रिप्ट में ऐरे ऑब्जेक्ट में बाहर की सरणी की तरह कार्य करने के लिए कुछ विधियां हैं। – Jonathan

उत्तर

5
var obj = {"123": "Lalala", 
      "456": "dum dum"}; 
for(var i in obj){ 
    //i = ID 
    // obj[i] = "song" 
} 

किसी ऑब्जेक्ट के माध्यम से लूप करने के लिए for(var i in obj) का उपयोग करें। इस for -स्टेटमेंट के अर्थ को समझने के लिए ऊपर दी गई टिप्पणियां देखें।

आप, वस्तुओं, सरणियों नहीं के बारे में बात कर रहे हैं जिस तरह से:

var array = [7, 5, 9]; 

एक सरणी, इस तरह से नकली जा सकता है ताकि एक for(var i=0; i<array_like.length; i++) इस्तेमाल किया जा सकता। (जैसे pop के रूप में) सरणी काम करता है, उन पर नहीं किया जा सकता जब तक कि आप इसे परिभाषित:

var array_like = {0:7, 1:5, 2:9, length:3}; 
+0

बहुत बहुत धन्यवाद। के लिए ... मेरे समाधान की तरह दिखता है। मुझे सुधारने के लिए भी धन्यवाद। –

+0

इससे कोई फर्क नहीं पड़ता है, लेकिन इसके उपयोग के लिए सामान्य दृष्टिकोण में हैऑनप्रोपर्टी के साथ जांचना न भूलें ... –

-1

अपने सरणी मान लिया जाये कि रूप में है:

array['id1'] = 'val1'; 
array['id2'] = 'val2'; 
array['id3'] = 'val3'; 

आप का उपयोग करके मूल्यों पर पुनरावृति कर सकते हैं:

for (var id in array) { 
    document.write(id + ' – ' + array[id]); 
} 
+0

में यह एक सरणी नहीं हो सकती है, लेकिन एक वस्तु। –

4

आप ऑब्जेक्ट की गुणों को दो तरीकों से एक्सेस कर सकते हैं। या तो "।" का उपयोग कर जैसे:

var my prop = obj.property; 

या ब्रैकेट अंकन के माध्यम से:

var my prop = obj["property"]; 

अब, जो वास्तव में आपके सवाल का जवाब नहीं है। तो, यहाँ कुछ तरीके हैं:

jQuery के प्रत्येक कार्य का उपयोग:

$.each(obj, function(key, value){ 
    //Do something with your key and value. 
}); 

समारोह के लिए जावास्क्रिप्ट का उपयोग:

for(var key in obj) 
{ 
    var value = obj[key]; 
    //Do something with your key and value. 
} 

आशा में मदद करता है!

+0

धन्यवाद। के लिए ... जाने का रास्ता प्रतीत होता है। हालांकि एक बात: jquery के साथ $ .each का उपयोग करना उसी तरीके से व्यवहार करता है जैसे लूप के लिए नियमित रूप से उपयोग करना, इसमें 0 से शुरू होगा और इसकी लंबाई के माध्यम से गिनती होगी। गलत कीवर्ड के लिए –

0

आप भी कर सकते हैं बस 'प्रत्येक के लिए' केवल गुण मूल्यों पर पुनरावृति करने के लिए:

वर obj = { "कुंजी 1": "VAL1", "कुंजी 2": "val2"};

प्रत्येक (obj में वर मूल्य) के लिए

{ .... }

लेकिन इस मामले में, आप एक संपत्ति नाम उपयोग करने में सक्षम नहीं हैं।

+0

-1- यह सिर्फ "प्रत्येक" की आवश्यकता नहीं है। –

+0

इसके लिए दो प्रकार हैं: 'for' - इंडेक्स पर पुनरावृत्त, और 'प्रत्येक के लिए' - मूल्यों पर पुनरावृत्त होता है। लेकिन 'प्रत्येक के लिए' आईई के पुराने संस्करण में समर्थित नहीं है। आपको ऐसा क्यों लगता है कि यह गलत कीवर्ड है? प्रत्येक12 के लिए – timestopper

+0

'भाषा के लिए मोज़िला-विशिष्ट विस्तार है, और ईसीएमए और सभी मौजूदा जेएस इंजनों में उपलब्ध मानक' इन ... इन 'सिंटैक्स पर कोई लाभ नहीं देता है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^