2013-09-26 5 views
7

कोड में नीचे, JSONObject.length 2:JSONObject.length क्यों अनिर्धारित है?

var JSONObject = [{ 
    "name": "John Johnson", 
    "street": "Oslo West 16", 
    "age": 33, 
    "phone": "555 1234567" 
}, { 
    "name": "John Johnson", 
    "street": "Oslo West 16", 
    "age": 33, 
    "phone": "555 1234567" 
}]; 

हालांकि, नीचे दिए गए कोड में, JSONObject.length अनिर्धारित रहता है। क्यूं कर?

var JSONObject = { 
    "name": "John Johnson", 
    "street": "Oslo West 16", 
    "age": 33, 
    "phone": "555 1234567" 
}; 
+7

स्टैक ओवरव्लो में आपका स्वागत है! मैं आपको इस प्रश्न को दूसरों के जवाब देने के लिए बेहतर बनाने के बारे में कुछ सुझाव देता हूं। सबसे पहले, मुझे पूरा यकीन है कि आप कोड गायब हैं: आपके पास अब जो कोड है वह ऐसी कोई त्रुटि नहीं देता है। दूसरा, कृपया अपना कोड प्रारूपित करें: आप टेक्स्ट कोड के ऊपर आइकन बार में "कोड नमूना" बटन दबाकर अपना कोड चुनकर ऐसा कर सकते हैं (ऐसा लगता है जैसे ग्रैमिन ने आपके लिए यह पहले से ही किया है)। अंत में, सुनिश्चित करें कि आपके प्रश्न में कोड नमूना, आप जो त्रुटि प्राप्त कर रहे हैं, और अपेक्षित आउटपुट शामिल हैं। अधिक जानकारी के लिए कृपया [पूछें] पढ़ें। –

+1

* "' var JSONObject = ... '"* यह JSON ऑब्जेक्ट नहीं है, यह एक जावास्क्रिप्ट ऑब्जेक्ट है। विशेष रूप से, यह एक जावास्क्रिप्ट सरणी है। [JSON] (http://json.org) एक टेक्स्टुअल डेटा इंटरचेंज नोटेशन है। स्रोत कोड JSON नहीं है। –

+1

यह क्यों बंद है? जबकि मूल पोस्ट अच्छी तरह से स्वरूपित नहीं था, सवाल मान्य है और मुद्दा अब स्पष्ट है (जावास्क्रिप्ट ऑब्जेक्ट्स में विरासत 'लम्बाई' संपत्ति नहीं है)। – user113215

उत्तर

14

जावास्क्रिप्ट में वस्तुओं के लिए एक लम्बाई संपत्ति नहीं है। यदि आप इसे काम करना चाहते हैं, तो आपको ऑब्जेक्ट के माध्यम से मैन्युअल रूप से पुन: प्रयास करना होगा।

function objLength(obj){ 
    var i=0; 
    for (var x in obj){ 
    if(obj.hasOwnProperty(x)){ 
     i++; 
    } 
    } 
    return i; 
} 


alert(objLength(JSONObject)); //returns 4 

संपादित करें:

जावास्क्रिप्ट इस के बाद से पर ले जाया गया है मूल रूप से लिखा गया था, IE8 पर्याप्त अप्रासंगिक है कि आप के बजाय Object.keys(JSONObject).length का उपयोग करने में सुरक्षित महसूस करना चाहिए। बहुत साफ

+1

वह उस ऑब्जेक्ट की केवल _enumerable_ गुणों की लंबाई लौटाएगा जो _directly_ पर हैं (प्रोटोटाइप श्रृंखला पर संख्याओं को छोड़कर)। इसे 'ऑब्जेक्ट.कीएस (ओबीजे)। लम्बाई' के रूप में लिखा जा सकता है (आधुनिक जेएस में)। –

+1

या ['Object.keys'] पर विचार करें (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) (संख्यात्मक गुण) या [' Object.getOwnPropertyNames' ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames) (सभी गुण) – user113215

+0

यह अविश्वसनीय रूप से साफ बेंजामिन है, मुझे यह पसंद है। यह ध्यान देने योग्य है कि यह आईई 8 में काम नहीं करता है, इसलिए वर्तमान में शिम्स के बिना अनुपयोगी है। – Doug

3

निम्नलिखित JSON की एक सरणी वस्तुओं वास्तव में है:

var JSONObject = [{ "name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"}, {"name":"John Johnson", "street":"Oslo West 16", 
"age":33, "phone":"555 1234567" }]; 

तो, जावास्क्रिप्ट लंबाई में एक सरणी की संपत्ति है। और आपके दूसरे मामले में iee

var JSONObject = {"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"}; 

JSON ऑब्जेक्ट एक सरणी नहीं है। तो लंबाई संपत्ति उपलब्ध नहीं है और अपरिभाषित होगा। तो अगर आप इस प्रकार एक सरणी के रूप में यह कर सकते हैं:

var JSONObject = [{"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"}]; 

या यदि आप पहले से ही वस्तु है JSONObject का कहना है। आप निम्न की कोशिश कर सकते हैं:

var JSONObject = {"name":"John Johnson", "street":"Oslo West 16", "age":33, 
"phone":"555 1234567"}; 
var jsonObjArray = []; // = new Array(); 
jsonObjArray.push(JSONObject); 

और तुम length संपत्ति मिलता है।

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