2011-02-27 2 views
6

में बहुआयामी सरणी में कुंजी के अस्तित्व की जांच करें उम्मीद है कि एक आसान सवाल है।जावास्क्रिप्ट

क्यों है कि एक बहुआयामी सरणी में एक महत्वपूर्ण के अस्तित्व के लिए जाँच:

a = new Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1][2] == undefined){ 
alert("sorry, that key doesn't exist"); 
} else {alert('good, your key exists'); 
} 

, सामान्य रूप में काम करने के लिए नहीं लगता है, लेकिन यह काम करता है जब मैं (पहली बार एक सूचकांक के लिए जाँच इस मामले में '0 ') जिसे a[0][x] द्वारा' परिभाषित 'किया गया है। उदाहरण के लिए, जब मैं a[0][2] (जिसे परिभाषित नहीं किया गया है) के लिए पूछता हूं, तो यह पहली चेतावनी दिखाता है। हालांकि, जब मैं a[1][0] के लिए पूछना, मैं मिलता है:

"Uncaught TypeError: Cannot read property '0' of undefined"

मैं कैसे इस समस्या को हल कर सकते हैं?

धन्यवाद

उत्तर

8

चेक पहले अगर पहला आयाम तो मौजूद है, तो दूसरे आयाम में महत्वपूर्ण मौजूद

तर्क अगर पहले टेस्ट false देता है, और दूसरे आयाम केवल परीक्षण करता है, तो पहले एक true है false वापस आ जाएगी ।

if(a[1] == undefined && a[1][2] == undefined) 
+0

बहुत बहुत धन्यवाद :-)। –

+0

यदि पहले अपरिभाषित है तो अगली जांच क्यों करें? यदि 'एक [1]' अनिर्धारित है तो स्पष्ट रूप से 'एक [1] [2] 'अपरिभाषित होगा। नहीं ? – Hafiz

1
a = Array(Array()) 

एक बहु-आयामी सरणी को परिभाषित नहीं करता। यह सिर्फ एक आइटम के साथ एक सरणी को परिभाषित करता है, जो एक और (खाली) सरणी होता है। जावास्क्रिप्ट में कोई अंतर्निहित बहुआयामी सरणी नहीं है, इसलिए आपको चीजों को मैन्युअल रूप से संभालना होगा।

+0

इसके अलावा, वहाँ होना चाहिए:

Cannot read property '0' of undefined.

आप पहली बार a[1] के लिए जाँच करें और फिर a[1][0] के लिए जाँच typeof ऑपरेटर का उपयोग करके इस समस्या का समाधान कर सकते हैं वहां कुछ 'नए' कीवर्ड हैं। बिना किसी कन्स्ट्रक्टर फ़ंक्शन को कॉल करना एक बुरी चीज है। – johusman

+0

ठीक है, यह मेरे प्रश्न का उत्तर नहीं देता है, हालांकि, 'नया ऐरे (ऐरे())' इंगित करने के लिए धन्यवाद। फिक्स्ड। –

1

आपको केवल सशर्त योग्यता प्राप्त करने की आवश्यकता है। चूंकि सरणी का [1] अनुक्रमणिका अपरिभाषित है, इसलिए आप इसमें मानों के लिए परीक्षण नहीं कर सकते हैं।

if(a[1] === undefined || a[1][2] === undefined) 
+0

आपके उत्तर के लिए धन्यवाद।दुर्भाग्य से, @ कैस्पर पहले पोस्ट किया गया था (3 मिनट पहले), इसलिए मुझे उसका जवाब स्वीकार करना होगा। +1, हालांकि। –

2
अपने सरणी वास्तव में इस तरह दिखता है पहले तीन कार्य के साथ

:

a = [['1','2']] 

a[0][2] पढ़ना सिर्फ undefined रिटर्न क्योंकि a[0] मौजूद है, लेकिन इसकी संपत्ति '0' परिभाषित नहीं है।

लेकिन a[1][0] पढ़ने का प्रयास एक लेखन त्रुटि क्योंकि a[1] पहले से ही undefined है और एक वस्तु नहीं है और इस प्रकार किसी भी गुण नहीं फेंकता है। यह भी है कि आपके त्रुटि संदेश का कहना है:

if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined') 
+0

मेरे असली कोड में, मेरे पास एक = [['1', '2']] से अधिक है, हालांकि, मुझे बिंदु मिल गया है। उत्तर देने के लिए आपका धन्यवाद। –

0
var a = Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1] === undefined || a[1][2] === undefined) { 
    alert("sorry, that key doesn't exist"); 
} else { 
    alert('good, your key exists'); 
} 
संबंधित मुद्दे