2012-07-30 10 views
5

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

var realArray = Array.prototype.slice.call(fakeArray); 

लेकिन क्या होगा अगर नकली सरणी प्रणाली द्वारा नहीं बनाया गया, क्या हुआ अगर fakeArray बस गया था:

var fakeArray = { "0": "some value", "1": "another value" }; 

इस मामले में, और मैंने इसका परीक्षण किया, उपर्युक्त विधि का उपयोग करके एक खाली सरणी होगी। जिस चीज को मैं एक नकली सरणी को चालू करने में सक्षम होना चाहता हूं, उदाहरण के लिए मैंने (मेरे द्वारा बनाया गया और सिस्टम द्वारा नहीं) वास्तविक सरणी में दिया है। और इससे पहले कि आप मुझे नकली सरणी को शुरुआत से वास्तविक सरणी बनाने के लिए कहें, आपको पता होना चाहिए कि मुझे उस संसाधन से नकली सरणी मिलती है जिसका मेरा कोई नियंत्रण नहीं है।

तो, मैं एक असली सरणी में सिस्टम द्वारा बनाई गई नकली सरणी कैसे बदलूं?

+1

आप ऑब्जेक्ट को एक 'length' संपत्ति जोड़ने की कोशिश की है? मेरा मानना ​​है कि लगभग सभी 'ऐरे। *' संशोधन सरणी की लंबाई का उपयोग करते हैं। – Zeta

+2

@ एलियास वैन ओटेगेम आपने स्पष्ट रूप से मेरा पूरा प्रश्न नहीं पढ़ा। – Cokegod

+0

@EliasVanOotegem उन चीजों से पूछने से पहले प्रश्न क्यों नहीं पढ़ा जाता है? –

उत्तर

5

आपका उदाहरण काम करेगा यदि आपकी "नकली सरणी" .length संपत्ति उचित रूप से सेट की गई है।

यह इंटरनेट एक्सप्लोरर के कुछ पुराने संस्करणों में काम नहीं करेगा।


आप वस्तु में प्रॉपर्टी की संख्या चाहते हैं

"एक असली सरणी में नकली सरणी मोड़ के उद्देश्यों में से एक इसकी लंबाई प्राप्त करने के लिए है", Object.keys का उपयोग ...

var len = Object.keys(fakeArray).length; 

पुराने ब्राउज़र के लिए Object.keys शिम करने के लिए, आप कर सकते हैं यह ...

if (!Object.keys) { 
    Object.keys = function(o) { 
     var keys = []; 
     for (var k in o) 
      if (o.hasOwnProperty(k)) 
       keys.push(k) 
     return keys; 
    }; 
} 

तो नकली सरणी "विरल" है, तो आप एक समाधान की आवश्यकता होगी @Rocket की तरह दिखाता है।

+0

कूल नहीं पढ़ा, यह काम करता है। साफ! :-) –

+0

यह आईई के पुराने संस्करणों में काम नहीं करेगा, अगर नकली सरणी नोडेलिस्ट (* "Array.prototype.slice: '' यह एक जावास्क्रिप्ट ऑब्जेक्ट नहीं है" * – Esailija

+0

धन्यवाद, हालांकि मैं वास्तव में पुराने ब्राउज़र के लिए अक्षम फॉल-बैक बनाना पसंद नहीं करते हैं, लेकिन मुझे लगता है कि आपको ऐसा करना है ... – Cokegod

3

आप बस "सरणी" के माध्यम से लूप कर सकते हैं और मानों को वास्तविक सरणी में सहेज सकते हैं।

var fakeArray = { "0": "some value", "1": "another value" }; 
var realArray = []; 

for(var i in fakeArray){ 
    realArray[i] = fakeArray[i]; 
} 
+0

आपने मुझे मिनट में हरा दिया;) +1 – rsplak

+1

@rsplak: महान दिमाग एक जैसे सोचते हैं। –

+1

+1 मुझे लगता है कि 'लम्बाई' ज्ञात नहीं होने के बाद से यह बेहतर होगा। –

0

आप वस्तु गुण पुनरावृति कर सकते हैं अपनी नई सरणी के लिए लोगों को आप चाहते हैं धक्का जबकि:

var array = []; 

for (var i in fakeArray) if (fakeArray.hasOwnProperty(i)) { 
    array.push(fakeArray[i]); 
} 
संबंधित मुद्दे