2012-03-03 4 views
23

को नई वस्तु जोड़े मैं वर्तमान में निम्नलिखित कोड है:सरणी

var myArray = []; 
    var myElement = { 
     id: 0, 
     value: 0 
    } 

    myElement.id =0; 
    myElement.value=1; 
    myArray[0] = myElement; 

    myElement.id =2; 
    myElement.value=3; 
    myArray[1] = myElement; 

समस्या यह है कि जब मैं दूसरे तत्व जोड़ जब मैं आईडी और मूल्य का मूल्य बदल मान भी पहला तत्व में बदल रहा है। क्या कोई तरीका है कि मैं सरणी में पहले डाले गए मानों के मान को बदलने के बिना नए तत्व जोड़ना जारी रख सकता हूं?

उत्तर

72

ऐसा करें:

var myArray = []; 

myArray.push({ id: 0, value: 1 }); 
myArray.push({ id: 2, value: 3 }); 

या इस अपनी स्थिति के लिए काम नहीं करेगा?

+1

आपका वाक्यविन्यास खराब हो गया है। आप इस तरह के किसी ऑब्जेक्ट के अंदर '=' का उपयोग नहीं करते हैं, तो आप ':' का उपयोग करते हैं। हालांकि मैं दृष्टिकोण से सहमत हूं। –

+1

ओह, अच्छा पकड़ो। फिक्स्ड। धन्यवाद! – kendaleiv

+0

@kendaleiv बिल्कुल सही यह मेरी स्थिति के लिए काम किया, धन्यवाद! – user1219627

0

आप jQuery का उपयोग कर रहे हैं, तो आप extend

myElement.id =0; 
myElement.value=1; 
myArray[0] = $.extend({}, myElement); 

myElement.id = 2; 
myElement.value = 3; 
myArray[1] = $.extend({}, myElement); 
1

क्योंकि वस्तु मान संदर्भ द्वारा पारित कर रहे हैं यही कारण है कि उपयोग कर सकते हैं। आप इस तरह वस्तु क्लोन कर सकते हैं:

var myArray = []; 
var myElement = { 
    id: 0, 
    value: 0 
} 

myElement.id =0; 
myElement.value=1; 
myArray[0] = myElement; 

var obj = {}; 
obj = clone(myElement); 
obj.id = 2; 
obj.value = 3; 

myArray[1] = obj; 

function clone(obj){ 
    if(obj == null || typeof(obj) != 'object') 
    return obj; 

    var temp = new obj.constructor(); 
    for(var key in obj) 
    temp[key] = clone(obj[key]); 

    return temp; 
}  

console.log(myArray[0]); 
console.log(myArray[1]); 

परिणाम:

- id: 0 
- value: 1 
- id: 2 
- value: 3 
0

वस्तुओं संदर्भ द्वारा पारित कर रहे हैं .. एक नई वस्तु बनाने के लिए, मैं इस दृष्टिकोण का पालन करें ..

//Template code for object creation. 
function myElement(id, value) { 
    this.id = id; 
    this.value = value; 
} 
var myArray = []; 

//instantiate myEle 
var myEle = new myElement(0, 0); 
//store myEle 
myArray[0] = myEle; 

//Now create a new object & store it 
myEle = new myElement(0, 1); 
myArray[1] = myEle; 
16

यह constructor function:

के लिए एक पाठ्यपुस्तक केस है 0
var myArray = []; 

function myElement(id, value){ 
    this.id = id 
    this.value = value 
} 

myArray[0] = new myElement(0,1) 
myArray[1] = new myElement(2,3) 
// or myArray.push(new myElement(1, 1)) 
+0

मैंने पहले ही अन्य उत्तर लागू किया है लेकिन मैं सहमत हूं कि यह भी एक अच्छा समाधान है। धन्यवाद – user1219627

0

आपके पास सरणी में दो बार एक ही वस्तु होगी, क्योंकि ऑब्जेक्ट मान संदर्भ द्वारा पारित किए जाते हैं। ({: 24, मूल्य: आईडी 246}) आप इस

myElement.id = 244; 
myElement.value = 3556; 
myArray[0] = $.extend({}, myElement); //for shallow copy or 
myArray[0] = $.extend(true, {}, myElement); // for deep copy 

या

myArray.push की तरह एक नई वस्तु बनाने के लिए है;