2012-04-22 12 views
7

मैं दूसरे के साहचर्य सरणी कॉपी करने के लिए कोड का निम्न भाग,जावास्क्रिप्ट में सहयोगी सरणी कॉपी करें?

<script> 

var some_db = new Array(); 

some_db["One"] = "1"; 

some_db["Two"] = "2"; 

some_db["Three"] = "3"; 

var copy_db = new Array(); 

alert(some_db["One"]); 

copy_db = some_db.slice(); 

alert(copy_db["One"]); 


</script> 

लेकिन दूसरे चेतावनी "अनिर्धारित" कहते हैं .. मैं यहाँ कुछ गलत कर रहा हूं? कृपया कोई संकेतक ..

+5

जावास्क्रिप्ट में कोई सहयोगी सरणी नहीं है। – Niko

+6

जावास्क्रिप्ट सरणी गैर-संख्यात्मक कुंजी के साथ काम नहीं करते हैं। यही कारण है कि 'एसलिस' उन्हें उठा नहीं लेता है। इसके बजाय एक सादा वस्तु का उपयोग करें और फिर देखें [जावास्क्रिप्ट ऑब्जेक्ट क्लोन करने का सबसे प्रभावी तरीका क्या है?] (Http://stackoverflow.com/questions/122102/what-is-the-most- कुशल-way-to- क्लोन एक जावास्क्रिप्ट वस्तु)। –

+1

@ निको: Arrays शुरुआत से वस्तुएं हैं ... वे "चालू" नहीं हैं। –

उत्तर

17

जावास्क्रिप्ट सहयोगी सरणी में ऑब्जेक्ट्स कहा जाता है।

<script> 

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

var copy_db = clone(some_db); 

alert(some_db["One"]); 

alert(copy_db["One"]);  

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
     if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); 
    } 
    return copy; 
} 

</script> 

यदि मैं jQuery का उपयोग कर रहा था तो मैं आमतौर पर var copy_db = $.extend({}, some_db); का उपयोग करता।

फिडल सबूत:http://jsfiddle.net/RNF5T/

धन्यवाद @maja।

+2

यह एक प्रतिलिपि नहीं बना रहा है ... –

+0

@FelixKling धन्यवाद duh। फिक्स्ड। – iambriansreed

+0

नोटिस, कि फ़ंक्शन बच्चे-ऑब्जेक्ट्स की प्रतिलिपि नहीं करता है – maja

4

जैसा कि @ निको टिप्पणी में कहता है, जावास्क्रिप्ट में कोई सहयोगी सरणी नहीं है।

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

var some_db = {}; 
some_db["One"] = "1"; 
some_db["Two"] = "2"; 
some_db["Three"] = "3"; 

var copy_db = {}, prop; 
// loop over all the keys in the object 
for (prop in some_db) { 
    // make sure the object has this value, and not its prototype 
    if (some_db.hasOwnProperty(prop)) { 
    copy_db[ prop ] = some_db[ prop ]; 
    } 
} 

कई पुस्तकालयों एक extend समारोह जो वास्तव में (किसी अन्य के लिए एक वस्तु से प्रतिलिपि कुंजी) करता है को लागू। सबसे विशेष रूप से jQuery और underscore.js। अंडरस्कोर में _.clone(obj) है जो प्रभावी रूप से _.extend({}, obj)

0

underscore.clone (http://underscorejs.org/#clone) मदद कर सकता है। यह शब्द वस्तु या सरणी में उथली प्रतिलिपि करता है।

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

copy_db = _.clone(some_db); 
2

आप JSON उपयोग करना चाहते हैं, तो आप इस 'साहचर्य सरणी' वस्तु ले जा सकते हैं:

वर assArray = {शून्य: 0, एक: 1, दो: 2, तीन: 3, क्या: 'कभी', आप: 'चाहते हैं'};

और इसे इस तरह 'क्लोन':

वर clonedObj = JSON.parse (JSON.stringify (assArray));

+1

हे, गधे सरणी ... – Ogen

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