Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-关联数组副本_Javascript_Jquery - Fatal编程技术网

Javascript-关联数组副本

Javascript-关联数组副本,javascript,jquery,Javascript,Jquery,从技术上讲,Javascript中没有关联数组这样的东西。但由于我无法避免的原因,我最终没有做过像这样的事情 var x = [1,2,3]; x.someRequiredProperty = 'some value'; 正如预期的那样,Javascript是Javascript,它可以工作。但是现在,我如何制作这个“数组”的副本,以便在不影响原始数组的情况下处理该数组的多个实例 我试过jQuery$.extend([],x),但它并没有给我一个新的副本。有什么我遗漏的吗?首先,如果你想要一个

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

var x = [1,2,3];
x.someRequiredProperty = 'some value';
正如预期的那样,Javascript是Javascript,它可以工作。但是现在,我如何制作这个“数组”的副本,以便在不影响原始数组的情况下处理该数组的多个实例


我试过jQuery
$.extend([],x)
,但它并没有给我一个新的副本。有什么我遗漏的吗?

首先,如果你想要一个关联数组,你应该使用一个对象:

var x = {};
x[0] = 1;
x[1] = 2;
x[2] = 3;
x.someProperty = 'Foo';
然后,如果需要副本,可以使用jQuery函数迭代每个属性并构建副本:

var copy = {};
$.each(x,function(i,e){
   copy[i] = e;
});

实例:

我不喜欢“关联”Javascript数组的想法,因为向数组添加属性对Javascript没有意义。例如,
length
属性将只计算索引元素(而不是属性),但是
For(assoc_数组中的var x)
将迭代数组的索引以及“键”。因此,要仅循环数组项,您必须使用完整的for循环
for(var i=0;i

无论如何,这样的复制功能可以满足您的需要:

function copy_assoc(arr)
{
    var out = [];

    for(var key in arr)
    {
        if(!arr.hasOwnProperty(key))
        {
            continue;
        }

        out[key] = arr[key];
    }

    return out;
}

这里有一个使用它的演示:

让我回答我自己的问题-
出于我所有的目的-使用
$.extend(true,[],myArray)
对数组进行深度克隆,可以得到一个新数组,其中所有属性都完好无损。但是我喜欢

从技术上讲,javascript中有关联数组:
{}
@davin:从技术上讲,它们甚至没有计算元素的非复杂方法:-),我想你也希望数组方法在新对象上工作?@zerkms,这通常不是定义中的要求(参见CLRS)。更不用说
Object.keys({…}).length
并没有那么棘手。@nbrooks-数组方法确实有效。而且我似乎低估了$.extend-显然如果你深度复制数组,它就像广告一样工作谢谢,但是我真的需要一个数组,另外,为什么每个都是$$extend更好你是否意识到在JS中,对象和数组之间几乎没有区别?另外,当你不扩展数组,只是复制它时,为什么要使用extend呢?可能没有太大的区别,但因为我用它来用d3.js绘制图表,所以它必须是一个数组。额外的属性需要存在,以便代码的其他部分识别集合,因此数组具有
length
属性等。不过,它将只计算数值索引