繁体   English   中英

Javascript-关联数组副本

[英]Javascript - Associative Array copy

从技术上讲,没有像Java中的关联数组这样的东西。 但是由于无法避免的原因,我最终没有做以下事情:

var x = [1,2,3];
x.someRequiredProperty = 'some value';

不出所料,Javascript是Javascript,它可以工作。 但是现在,如何复制此“ 数组 ”,以便我可以在不损害原始数组的情况下处理该数组的多个实例?

我已经尝试过jQuery $.extend([], x) ,但实际上并没有给我新的副本。 有什么我想念的吗?

我不喜欢“关联” 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/

首先,如果需要关联数组,则应使用一个对象:

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/

让我回答我自己的问题-就我所有的目的-使用$.extend(true, [], myArray)对数组进行深层克隆会为我提供一个具有所有属性完好无损的新数组。 但是我喜欢@CodeMonkey的答案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM