2010-06-02 6 views
84

var user = {} में एक कुंजी/मान ऑब्जेक्ट को लूप कैसे करें;जावास्क्रिप्ट

अब मैं setUsers विधि बनाना चाहता हूं जो एक कुंजी/मान जोड़ी वस्तु लेता है और user चर प्रारंभ करता है।

setUsers = function(data) { 

    // loop and init user 

} 

जहां डाटा की तरह है:

234: "john", 23421: "smith", .... 
+3

कैसे एक पुराने सवाल एक नए एक से दोहराया जा सकता है: यह आम तौर पर एक अच्छा विचार है जब for...in छोरों का उपयोग कर रहा है? –

उत्तर

144

वस्तु के प्रोटोटाइप से विरासत में मिली गुण से सावधान रहें (जो आप सहित रहे हैं हो सकता है आपके पृष्ठ पर किसी भी पुस्तकालय, जैसे प्रोटोटाइप के पुराने संस्करण)। आप ऑब्जेक्ट की hasOwnProperty() विधि का उपयोग करके इसकी जांच कर सकते हैं।

var user = {}; 

function setUsers(data) { 
    for (var k in data) { 
     if (data.hasOwnProperty(k)) { 
      user[k] = data[k]; 
     } 
    } 
} 
+2

क्या लूप के बिना ऐसा करने के लिए वैसे भी है? मैं बड़ी कुंजी मूल्य जोड़ों के माध्यम से गति के बारे में चिंतित हूं (और मुझे पता है कि क्रॉकफोर्ड जेएसलिंट का उपयोग करने से प्रशंसक नहीं है, लेकिन मुझे उसकी तर्क के बारे में निश्चित नहीं है)। क्या इन चीजों के बारे में चिंता करने का कोई कारण है? – streetlight

+2

@ स्ट्रीटलाइट: यह पर्यावरण पर निर्भर करता है। यदि आप ईसीएमएस्क्रिप्ट 5 (सभी आधुनिक ब्राउज़र करते हैं, जैसा कि नोड.जेएस करता है) पर भरोसा कर सकते हैं, तो आपके पास विकल्प हैं ['Object.keys()'] (https://developer.mozilla.org/en-US/ डॉक्स/जावास्क्रिप्ट/संदर्भ/Global_Objects/वस्तु/कुंजी)। यदि आपको आईई <= 8 का समर्थन करने की आवश्यकता है, उदाहरण के लिए, आप 'इन ... इन' के साथ फंस गए हैं। –

9

कुछ इस तरह:

setUsers = function (data) { 
    for (k in data) { 
     user[k] = data[k]; 
    } 
} 
55
for (var key in data) { 
    alert("User " + data[key] + " is #" + key); // "User john is #234" 
} 
संबंधित मुद्दे