我有一个带有 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)
但问题是你为什么要这样做。 如果这是某种极端的缓存优化,例如制作自己的商业游戏引擎,则任何同步两种数据结构的方法都可能会抵消这种优化优势。
关于javascript - 保留平面数组作为 2D 或 3D 数组的引用副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70862186/