2012-05-21 23 views
8

में किसी तत्व को प्रतिस्थापित करना मैं संपूर्ण ऑब्जेक्ट को सरणी में बदलना चाहता हूं।ऑब्जेक्ट सरणी

http://jsfiddle.net/CWSbJ/

var array = [ {name: "name1" }, { name: "name2" } ]; 
var element = array[0]; 
element = {name: "name3"}; 
alert(array[0].name); 

कोड मैं उत्पादन NAME3 उम्मीद करेंगे के इस टुकड़े में, क्यों मैं इस तरह एक सरणी में एक संपूर्ण वस्तु को बदल नहीं सकते? और ऐसा करने का अच्छा तरीका क्या है?

+1

तुम बस 'element' करने के लिए एक अन्य मान निर्दिष्ट कर रहे हैं, नहीं करने के लिए' सरणी [0] ' । –

उत्तर

16

सही तरीका है

array[0] = {name: "name3"}; 

आपका मौजूदा कोड अपेक्षित ढंग से काम नहीं करता है क्योंकि आप

var element = array[0]; 

साथ पहला तत्व के लिए एक referenc * ले जा रहे हैं और उसके बाद आप कर रहे हैं मूल्य की जगह इस स्थानीय चर के किसी अन्य वस्तु के साथ। यह मूल सरणी unmodified छोड़ देता है।

+0

थोड़ा गलत स्पष्टीकरण। 'element' एक प्रति नहीं है, लेकिन * सरणी [0]' में संग्रहीत ऑब्जेक्ट के लिए * संदर्भ * है। 'Element.name' को बदलना 'सरणी [0] .name' को प्रभावित करेगा। – Deestan

+0

@Deestan: धन्यवाद, तय है। वास्तव में नहीं पता कि मैं क्या सोच रहा था। – Jon

+0

मुझे लगता है कि आपको सरणी [i] .name = "आप असाइन करने के लिए मानते हैं" का प्रयास करना चाहिए, यदि आप सरणी का पालन करते हैं [i] = {name: 'something'}, प्रत्येक ऑब्जेक्ट प्रॉपर्टी को केवल नाम के साथ असाइन किया जाता है, तो सभी उसमें शून्य होंगे मामला। – Sudarshan

2

इस प्रयास करें:

var array = [ {name: "name1" }, { name: "name2" } ]; 
array[0] = {name: "name3"}; 
alert(array[0].name); 

element वास्तविक सरणी नहीं है - सरणी के अपने एक प्रति

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