javascript - 保留平面数组作为 2D 或 3D 数组的引用副本

标签 javascript arrays p5.js

我有一个带有 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.coordsthis.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/

相关文章:

javascript - Parsly javascript 表单验证器

arrays - Codeigniter - 将表单输入信息传递给 Controller ​​并将其显示在下一个 View 上

javascript - 考虑到元素是 "**",如何全局交换数组字符串

javascript - 创建具有附加属性和时刻的一系列工作日

javascript - 在 p5.js 中检测多个按键并触发一次操作

javascript - 我怎样才能每次 vol > 6 时以 1 计数

javascript - 如何将 requestAnimationFrame 与 TypeScript 对象一起使用?

javascript - 如何移动标签在 Chart.js 饼图上的位置

javascript - 三个js中一行中心点的文字

vector - 如何在 3D 空间中旋转矢量? P5.js