Javascript - 关联数组副本

时间:2012-07-11 09:10:33

标签: javascript jquery

从技术上讲,Javascript中没有关联数组这样的东西。但由于我无法避免的原因,我最终没有做过像

这样的事情
var x = [1,2,3];
x.someRequiredProperty = 'some value';

正如所料,Javascript是Javascript,它有效。但是现在,我如何制作这个'数组'的副本,以便我可以处理这个数组的多个实例而不会损害原始数据?

我尝试了jQuery $.extend([], x),它并没有给我一个新副本。有什么我想念的吗?

4 个答案:

答案 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;
});

实例:http://jsfiddle.net/KhBC9/

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