Копировать ассоциативный массив в javascript?

У меня есть следующий фрагмент кода для копирования одного ассоциативного массива в другой,

<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>

но второе предупреждение говорит "undefined".. Я делаю что-то не так? Любые указатели, пожалуйста..

4 ответов


в JavaScript ассоциативные массивы называются объектами.

<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>

Я обычно использую var copy_db = $.extend({}, some_db); если бы я использовал jQuery.

Скрипка Доказательства: http://jsfiddle.net/RNF5T/

спасибо @maja.


как говорит @Niko в комментарии, в JavaScript нет ассоциативных массивов.

вы на самом деле устанавливаете свойства объекта array, что не очень хорошая идея. Вам было бы лучше использовать реальный объект.

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 и подчеркивания.js. Подчеркиваем также _.clone( obj ), фактически _.extend( {}, obj )


Если вы хотите использовать JSON, вы можете взять этот 'объект ассоциативный массив':

var assArray = {ноль: 0, один:1,два:2,Три: 3,что:'когда-либо',вы:'хотите'};

и "клонировать" его, как это:

var clonedObj = JSON.разобрать(в формате JSON.stringify (assArray));


подчеркивания.клон (http://underscorejs.org/#clone) может помочь. Он выполняет неглубокое копирование в объект или массив словаря.

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

copy_db = _.clone(some_db);