JavaScript复制对象数组

时间:2014-10-25 17:15:45

标签: javascript arrays javascript-objects jquery-gmap3

我尝试复制一个对象数组,但我失败了。每次我最终得到一系列对原始aray的引用。

我尝试了#34; .concat()",我使用"用于"分别复制每个元素,但每次我在临时数组中进行更改时,原始数组也会改变。

这是代码。

Glossary:
tablicaZnacznikow - original array
placeholder - temporary array 
tempClosest - id of closest marker
startingPointID - id of marker from witch i start calculation
.meta field - defines if marker has been added to polyline

var placeholder = tablicaZnacznikow.concat();
            var tempArrayOfSomething = [placeholder[startingPointID].latLng];
            for (var i = 0; i < placeholder.length; i++) {
                var tempClosest = findClosestMarkerToAnotherMarker(placeholder, startingPointID);
                tempArrayOfSomething.push(placeholder[tempClosest].latLng);
                startingPointID = tempClosest;
                placeholder[tempClosest].meta = "USED";
                console.log(tempClosest);
            }

我使用此代码创建一个数组,用于为gMap3折线创建路径。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

为了克隆对象数组,您可以简单地使用map方法并在每次迭代中返回对象副本。使用$.extend制作对象副本非常简单非常方便。一起来:

var newArr = tablicaZnacznikow.map(function(el) { 
    return $.extend({}, el);
});

甚至更短:

var newArr = tablicaZnacznikow.map($.extend.bind(null, {}));

那就是它。 map创建一个新数组,$.extend克隆对象。你得到一个克隆产生的对象数组。

注意:我使用了IE9 +支持的两种ES5方法。如果您也支持较旧的IE,只需使用$.map代替Array.prototype.map$.proxy而不是Array.prototype.bind

答案 1 :(得分:0)

您所要做的就是制作数组的深层副本(例如使用jQuery):

var placeholder = $.extend(true, [], tablicaZnacznikow);