从技术上讲,Javascript中没有关联数组这样的东西。但由于我无法避免的原因,我最终没有做过像
这样的事情var x = [1,2,3];
x.someRequiredProperty = 'some value';
正如所料,Javascript是Javascript,它有效。但是现在,我如何制作这个'数组'的副本,以便我可以处理这个数组的多个实例而不会损害原始数据?
我尝试了jQuery $.extend([], x)
,它并没有给我一个新副本。有什么我想念的吗?
答案 0 :(得分:1)
我不喜欢“关联”Javascript数组的想法,因为向数组添加属性对JavaScript没有意义。例如,length
属性仅计算索引元素(而不是属性),但for(var x in assoc_array)
将遍历数组的索引以及“键”。因此,要仅循环数组项,您必须使用完整的for循环for(var i = 0; i < assoc_array.length; i++)...
。
无论如何,这样的复制功能可以用于您的目的:
function copy_assoc(arr)
{
var out = [];
for(var key in arr)
{
if(!arr.hasOwnProperty(key))
{
continue;
}
out[key] = arr[key];
}
return out;
}
以下是使用它的演示:http://jsfiddle.net/DbVV8/3/
答案 1 :(得分:0)
首先,如果你想要一个关联数组,你应该使用一个对象:
var x = {};
x[0] = 1;
x[1] = 2;
x[2] = 3;
x.someProperty = 'Foo';
然后,如果你想要一个副本,你可以使用jQuery的each
函数迭代每个属性并构建一个副本:
var copy = {};
$.each(x,function(i,e){
copy[i] = e;
});
答案 2 :(得分:0)
让我回答我自己的问题 -
出于我的所有目的 - 使用$.extend(true, [], myArray)
对数组进行深度克隆,为我提供了一个新数组,其中所有属性都保持不变。但我喜欢@CodeMonkey's answer。
答案 3 :(得分:-1)
<script>
// My Associative Array that I want to copy
var My_Associative_Arr = new Array();
My_Associative_Arr['LAST_NAME'] = 'Kolosky';
My_Associative_Arr['FIRST_NAME'] = 'Deidre';
My_Associative_Arr['SEX'] = 'Female';
// A construct to hold a copy of my Associative Array
var COPY_Of_Asociative_Array = new Array();
// Copy Associative Array Funk
function Coppy_Associative_Arr(Arr_To_Coppy){
for(var key in Arr_To_Coppy){// loop array to copy
COPY_Of_Asociative_Array[key] = Arr_To_Coppy[key];// populate construct with original array values
}// END loop array to copy
//lets take a look at our arrays and see if it has made an exact copy
document.write("My origional associative array = <br /><br /><br />");
for(var key in My_Associative_Arr){// loop array to copy
document.write("key = '"+key+"' : Value = '"+My_Associative_Arr[key]+"'<br />");
}// END loop array to copy
document.write("<br /><br />");
document.write("My COPY of origional associative array = <br /><br />");
for(var key in COPY_Of_Asociative_Array){// loop array to copy
document.write("key = '"+key+"' : Value = '"+COPY_Of_Asociative_Array[key]+"'<br />");
}// END loop array to copy
document.write("<br /><br />");
}
// END Coppy_Multi_Dime_Associative_Arr(Arr_To_Coppy)
// call function and pass Associative Array as parameter
Coppy_Associative_Arr(My_Associative_Arr);
</script>