Копировать ассоциативный массив в 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);