我尝试复制一个对象数组,但我失败了。每次我最终得到一系列对原始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折线创建路径。 提前谢谢。
答案 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);