gpt4 book ai didi

javascript - 对变量的更改会影响先前在 javascript 中保存的数组值

转载 作者:行者123 更新时间:2023-11-30 13:12:58 25 4
gpt4 key购买 nike

我有一个非常奇怪的 javascript 问题。我用 OpenLayers 和 OSM 的 map 数据制作了一张 map 。每次我绘制一个特征(点或线)时,我都会在草图完成时触发一个名为 redrawFeatures 的函数,主要用于拆分线并为每条线提供起点和终点。到目前为止一切正常,但我还想将绘制的点(和线)从 mapprojection (EPSG:900913) 转换为 displayprojection (EPSG:4326),但出现了问题。下面这段代码就是函数:

var pointsOnMap = [];
var linesOnMap = [];

function redrawFeatures(e) {
var vert = e.feature.geometry.getVertices();
var points = [];
var pointFeatures = [];
var lineFeatures = [];

for (var i = 0; i < vert.length; i++) {
var point = new OpenLayers.Geometry.Point(vert[i].x, vert[i].y);

points.push(point);
alert(points[i].x + ', ' + points[i].y);
pointFeatures.push(new OpenLayers.Feature.Vector(point));
alert(points[i].x + ', ' + points[i].y);
pointsOnMap.push(point.transform(new OpenLayers.Projection("EPSG:900913"),
new OpenLayers.Projection("EPSG:4326")));
alert(points[i].x + ', ' + points[i].y);
if (i >= 1) {
var line = new OpenLayers.Geometry.LineString([points[i-1], points[i]]);

lineFeatures.push(new OpenLayers.Feature.Vector(line));
linesOnMap.push(line.transform(new OpenLayers.Projection("EPSG:900913"),
new OpenLayers.Projection("EPSG:4326")));
}
}

draw.destroyFeatures([e.feature]);
draw.addFeatures(lineFeatures);
draw.addFeatures(pointFeatures);

}

名为draw 的变量是我绘制的图层。

我从事件中确定坐标,创建一个新点(第 11 行)并将它们保存到一个数组中(第 13 行)。将同一个点变成一个特征并将其保存到另一个数组(第 15 行)问题是,当我稍后将这个点转换为 displayprojection 并将这个点保存在第三个数组(第 17 行)时,坐标也发生了变化在先前保存的名为 points 的第一个数组的值中。我提醒保存的坐标三次的值,这是我得到但不理解的:

Alert 1 (第14行)没错我得到了点的坐标

Alert 2(第 16 行)仍然正确(与第一个相同)

Alert 3 (第 19 行)现在它变错了!我像以前一样警告相同的变量,但在 point 转换之后 points[i] 的值也无故更改。

有什么我没有意识到的错误吗?

最佳答案

看起来 transform 函数就地操作,并修改现有的 point 数据。如果您想保留以前的值,您应该克隆该点然后对其进行操作

clone = point.clone();

关于javascript - 对变量的更改会影响先前在 javascript 中保存的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13232205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com