【问题标题】:JavaScript copying object arraysJavaScript 复制对象数组
【发布时间】:2014-10-25 17:15:45
【问题描述】:

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

我尝试了“.concat()”,我使用“for”分别复制每个元素,但是每次我在临时数组中进行更改时,原始数组也发生了变化。

这是代码。

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 折线创建路径。 提前致谢。

【问题讨论】:

标签: javascript arrays javascript-objects jquery-gmap3


【解决方案1】:

为了克隆对象数组,您可以简单地使用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

【讨论】:

  • 你能发布你想要复制的数组的例子吗?看起来我很困惑,你需要复制tablicaZnacznikow。在这种情况下,请尝试tablicaZnacznikow.map(function(el) { ... });
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 2015-05-19
    • 2021-03-29
    • 2018-10-24
    • 2019-10-31
    • 2014-01-10
    • 2016-12-13
    相关资源
    最近更新 更多