2010-07-26 14 views
102

मैं यहां लंबाई की जांच करने की कोशिश कर रहा हूं। गिनती की कोशिश की क्या मुझे कुछ याद आ रही है?शब्दकोश वस्तु की लंबाई की जांच

var dNames = {}; 
dNames = GetAllNames(); 

for (var i = 0, l = dName.length; i < l; i++) 
{ 
     alert("Name: " + dName[i].name); 
} 

dNames नाम/मूल्य जोड़े रखता है। मुझे पता है कि डीएनएम्स के पास उस ऑब्जेक्ट में मूल्य हैं लेकिन यह अभी भी पूरी तरह से उस पर छोड़ रहा है और जब मैं dName भी अलर्ट करता हूं। स्पष्ट रूप से यह नहीं है कि यह कैसे करें ... इसलिए सुनिश्चित नहीं है। इसे वेब पर देखा। इस पर कुछ भी नहीं मिला।

+2

सादा वस्तुओं पर कोई "लंबाई" संपत्ति नहीं है। ऐसा कुछ है जो ऐरे के उदाहरण हैं। – Pointy

+0

ठीक है, किसी को भी जवाब देने के लिए उचित या विनम्र तरीका पता है? मुझे पता है कि सब्री वास्तव में "जवाब" के साथ आया था लेकिन मध्यस्थ इसे अपने जैसे मध्यवर्ती जेएस लड़के को समझा सकता था। मैं किसी को भी पेश करना नहीं चाहता हूं। – PositiveGuy

+0

आप उस व्यक्ति का उत्तर देते हैं जिसने उत्तर आपके लिए काम किया है। – KareemElashmawy

उत्तर

7
var c = {'a':'A', 'b':'B', 'c':'C'}; 
var count = 0; 
for (var i in c) { 
    if (c.hasOwnProperty(i)) count++; 
} 

alert(count); 
+0

ठीक है तो आपको इसके माध्यम से पुन: प्रयास करना होगा ... किसी कस्टम ऑब्जेक्ट को बंद करने का कोई तरीका नहीं है जिसमें नाम/मान हैं? – PositiveGuy

+2

मुझे नहीं लगता ** ** है। प्रोटोटाइप श्रृंखला को पुनरावृत्ति को रोकने के लिए "hasOwnProperty" को जांचना सुनिश्चित करें और केवल गुणों की जांच करें। – sberry

+0

धन्यवाद..मैं एक ओओपी लड़का हूं, लेकिन जेएस के लिए अधिक उपयोग करना शुरू कर रहा हूं। – PositiveGuy

1

यह प्रश्न भ्रमित है। एक नियमित वस्तु, {} में length संपत्ति नहीं है जब तक कि आप अपना स्वयं का फ़ंक्शन कन्स्ट्रक्टर बनाने का इरादा नहीं रखते हैं जो कस्टम ऑब्जेक्ट्स उत्पन्न करता है जिसमें यह होता है (जिस स्थिति में आपने निर्दिष्ट नहीं किया था)।

मतलब, आपको for..in ऑब्जेक्ट पर "लंबाई" प्राप्त करना होगा, क्योंकि length सेट नहीं है, और काउंटर को बढ़ाता है।

मुझे उलझन में है कि आपको length क्यों चाहिए। क्या आप ऑब्जेक्ट पर 0 मैन्युअल रूप से सेट कर रहे हैं, या आप कस्टम स्ट्रिंग कुंजियों पर भरोसा कर रहे हैं? उदाहरण के लिए obj['foo'] = 'bar';। यदि उत्तरार्द्ध, फिर, लंबाई की आवश्यकता क्यों?

# 1 संपादित: क्यों तुम सिर्फ ऐसा नहीं कर सकते?

list = [ {name:'john'}, {name:'bob'} ]; 

फिर सूची में फिर से शुरू करें? length पहले से ही सेट है।

+0

तो एक सरणी की गिनती संपत्ति है ... क्योंकि शायद जेएस मूल प्रकार में बनाया गया है? – PositiveGuy

+4

'[]' की लंबाई 'है, '{}' नहीं है। '{] 'के लिए' लंबाई 'के साथ' for' लूप का उपयोग करें और' {} 'के लिए' for..in' 'का उपयोग करें। –

+1

अपने प्रश्न का उत्तर देने के लिए, यह भ्रमित है क्योंकि मैं जेएस लड़का नहीं हूं, मैं एक सी # लड़का हूं। इसलिए मुझे यह जांचने के लिए मेरी शब्दकोश की लंबाई की जांच करने की आवश्यकता थी कि इसमें कोई वस्तु है या नहीं। नियमित त्रुटि प्रबंधन के लिए मुझे लगता है कि आप बस एक शब्दकोश पर नल की जांच करेंगे, लेकिन सिर्फ यह देखना चाहते थे कि कितने लौटे और मेरे शब्दकोश में जोड़ा गया था। तो समस्या यह नहीं थी कि पुनरावृत्ति कैसे करें, बस देखें कि गिनती कैसे प्राप्त करें जिसे मैंने सोचा था कि आप एक शब्दकोश प्रकार (एनवीपी) ऑब्जेक्ट के साथ कह सकते हैं। – PositiveGuy

0

एक शब्दकोश में गणना और शो कुंजियों (कंसोल में चलाने):

o=[];count=0; for (i in topicNames) { ++count; o.push(count+": "+ i) } o.join("\n") 

नमूना उत्पादन:

"1: Phase-out Left-hand 
2: Define All Top Level Taxonomies But Processes 
3: 987 
4: 16:00 
5: Identify suppliers" 

सरल गिनती समारोह:

function size_dict(d){c=0; for (i in d) ++c; return c} 
254

मैं क्या इस्तेमाल होता है Object.keys() सभी चाबियों की एक सूची वापस करने के लिए और उसके बाद उस

की लंबाई प्राप्त करें 210
Object.keys(dictionary).length 
+1

बस मुझे क्या चाहिए! चीयर्स – Gesias

+11

अन्य लोगों के लिए एफवाईआई अभी भी आईई 8 का समर्थन करता है: कोई पासा नहीं। [लिंक] (http://kangax.github.io/es5-compat-table/#Object.keys) –

+0

क्रोम 53 में, मैं ऑब्जेक्ट.कीज़ (शब्दकोश) को देखकर 1 की लंबाई की रिपोर्ट करता हूं, भले ही यह एक खाली शब्दकोश है । इसमें '$ type' नामक एक प्रविष्टि है। – user99999991

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