2013-09-07 7 views
5

मैं माफी चाहता हूँ अगर इस से पहले कहा गया है, यह कुछ है कि के लिए ...जावास्क्रिप्ट सरणी कुंजी लुक

मैं JavaScript व्यवस्था का उपयोग करने के लिए वस्तुओं रखना चाहते हैं खोज करने के लिए मुश्किल है, आईडी

के रूप में कुंजी के साथ है उदाहरण के लिए

, मान लीजिए कि मैं कौन भिन्न आईडी

var people = new Array(); 
var person = {property: value}; // this is person ID 4 

var people[4] = person; 

मैं तो कह कर कि उपयोगकर्ता को संदर्भित करने में सक्षम होना चाहते था लोगों के एक समूह था चलो, लोगों को [ID] .propery

समस्या यह है कि इस सरणी का आउटपुट अब होगा;

null,null,null,null,object 

क्योंकि यह 0,1,2,3,4

मैं बेवकूफ या कुछ और किया जा रहा है कर रहा हूँ होने के लिए कुंजी की उम्मीद कर रहा है? :-) हम इसे स्ट्रिंग्स के लिए सही कर सकते हैं, तो अनुक्रमिक संख्या क्यों नहीं?

क्या मैं से बचने के लिए हर बार जब मैं इसके अंदर एक विशेष व्यक्ति तक पहुंचना चाहते हैं सरणी में हर एक वस्तु पर पाश करने के लिए हो रही है कोशिश कर रहा हूँ, इसलिए मैं लगा कि कुंजी के रूप में आईडी नंबर का उपयोग कर काम करेगा

धन्यवाद दोस्तों! ,

var people = {}; //this is an object 
people[name] = 'toto'; 

हम इस वस्तु के लिए नए प्रॉपर्टी जोड़ रहे हैं क्योंकि जावास्क्रिप्ट में प्रत्येक वस्तु: :-)

+1

'सरणी का आउटपुट' का क्या अर्थ है? हां, जेएस में सरणी स्पैस हैं, और आप इस मामले में ऑब्जेक्ट्स का उपयोग करने पर बेहतर विचार कर सकते हैं, लेकिन मैं मानता हूं कि मुझे अभी भी समझ में नहीं आया कि आपने जो उदाहरण दिखाया है, उसमें क्या गलत है। – raina77ow

+1

_ "इस सरणी का आउटपुट अब शून्य, शून्य, शून्य, शून्य, ऑब्जेक्ट 'होगा _ _ - Arrays वास्तव में" आउटपुट "नहीं है।आपके सरणी में इंडेक्स 4 पर एक तत्व होगा, और यदि आपने निचले इंडेक्स तक पहुंचने का प्रयास किया है, उदाहरण के लिए, 'लोग [2]' आपको 'अपरिभाषित' मिलेगा, न कि 'शून्य'। इसके अलावा आपके पास 'var people [4] = व्यक्ति' में एक वाक्यविन्यास त्रुटि है, आपको 'var' को हटाने की आवश्यकता है। – nnnnnn

उत्तर

7

जब हम इस तरह, कुंजी के रूप में एक स्ट्रिंग का उपयोग एक शब्दकोश वस्तु

var people = {}; 
people[4] = 'me'; 
1

का प्रयोग करें एक हैशटेबल के रूप में देखा जा सकता है।

यदि आप किसी सरणी का उपयोग करते हैं, तो यह अभी भी एक ऑब्जेक्ट है, आप स्ट्रिंग के रूप में स्ट्रिंग का उपयोग करके इसमें गुण जोड़ सकते हैं। लेकिन अगर आप people[4] = 'toto'; जैसे कुछ करते हैं, तो आप सरणी में एक स्ट्रिंग जोड़ रहे हैं, तो सरणी की लंबाई तब 5 हो जाएगी। बेशक संख्या 4 अभी भी इस सरणी वस्तु की एक संपत्ति होगी।

3

मैं सुझाव दूंगा कि आप संग्रह का उपयोग करें। एक संग्रह वस्तुओं की एक सरणी है। फिर आप प्रत्येक व्यक्ति पर संपत्ति पारित कर सकते हैं। आप किसी भी संपत्ति द्वारा अपने संग्रह को फ़िल्टर कर सकते हैं। तो आप जो कर रहे हैं उसके करीब, लेकिन इंडेक्स पर रिले करने की बजाय, प्रत्येक व्यक्ति के लिए id पास करें।

var people = []; // a collection 

var person = { 
    id: 4, 
    name: 'John' 
}; 

people.push(person); 

// Filtering: 

// By id 
var john = people.filter(function(person) { 
    return person.id == 4; 
}); 

// By name 
var john = people.filter(function(person) { 
    return person.name == 'John'; 
}); 

आप उन लूपों को फिर से उपयोग करने के लिए सार कर सकते हैं। यह भी सुनिश्चित करें कि आपकी आईडी अद्वितीय हैं। यदि डीबी से डेटा आ रहा है तो यह ठीक होना चाहिए, अन्यथा मैं उन्हें कहीं भी ट्रैक रखूंगा।

संग्रहों का लाभ, चाबियों के साथ एक सादे ऑब्जेक्ट के विपरीत है कि आप सॉर्ट और फिल्टर कर सकते हैं, जबकि ऑब्जेक्ट, जहां गुणों का क्रम गारंटी नहीं है, आप इसे सरल नहीं कर सकते हैं।

ध्यान दें कि filter केवल "आधुनिक ब्राउज़र" पर काम करता है, इसलिए IE9 +, लेकिन पुराने ब्राउज़र के लिए polyfills हैं।

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