保留平面阵列作为 2D 或 3D 阵列的参考副本
Keep a flat array as a reference copy to a 2D or 3D array
我有一个带有 x 和 y 参数的点对象数组,例如:
this.points = [p1, p2, p3,..];
我像这样将其展平为一维数组:
this.coords = [];
for(let p of this.points){
this.coords.push(p.x);
this.coords.push(p.y);
}
坐标数组现在是:
this.coords = [p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, ...]
我的问题如下,我希望其中一个数组的修改会影响另一个。因为现在当我修改 this.coords
或 this.points
时,另一个没有更新。
有没有办法做到这一点,还是我想错了,有一个我不知道的编码坐标的一般指南?
谢谢
JavaScript有两种值:参考值和原始值。
原始值(如数字)被复制,编辑副本永远不会影响原始值,反之亦然。
因为你的 x 和 y 坐标可能是原始数值,所以这是不可能的。
您可以将它们封装在引用值中,例如使用包含 1 个元素的数组。
const points = [{x: [1], y: [2]}, {x: [3], y:[4]}];
const flat = [points[0].x,points[0].y,points[1].x,points[1].y];
flat[0][0]+=9;
console.log(points[0].x)
但问题是您最初为什么要这样做。
如果那是某种极端的缓存优化,比如制作您自己的商业游戏引擎,那么任何一种同步这两个数据结构的方法都可能会抵消这种优化的好处。
我有一个带有 x 和 y 参数的点对象数组,例如:
this.points = [p1, p2, p3,..];
我像这样将其展平为一维数组:
this.coords = [];
for(let p of this.points){
this.coords.push(p.x);
this.coords.push(p.y);
}
坐标数组现在是:
this.coords = [p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, ...]
我的问题如下,我希望其中一个数组的修改会影响另一个。因为现在当我修改 this.coords
或 this.points
时,另一个没有更新。
有没有办法做到这一点,还是我想错了,有一个我不知道的编码坐标的一般指南?
谢谢
JavaScript有两种值:参考值和原始值。
原始值(如数字)被复制,编辑副本永远不会影响原始值,反之亦然。 因为你的 x 和 y 坐标可能是原始数值,所以这是不可能的。
您可以将它们封装在引用值中,例如使用包含 1 个元素的数组。
const points = [{x: [1], y: [2]}, {x: [3], y:[4]}];
const flat = [points[0].x,points[0].y,points[1].x,points[1].y];
flat[0][0]+=9;
console.log(points[0].x)
但问题是您最初为什么要这样做。 如果那是某种极端的缓存优化,比如制作您自己的商业游戏引擎,那么任何一种同步这两个数据结构的方法都可能会抵消这种优化的好处。