javascript - 在本地而不是全局修改变量
问题描述
我需要保存全局设置数组变量的副本,同时在本地对其进行修改。出于某种原因,下面的代码似乎没有这样做。
var tileArray;
.
.
.
function simplify (tiles){
tileArray = tiles; //tileArray is the global variable passed to simplify()
for (var i = 0; i < tiles.length; i++){
if (tiles[i].numeratorDim == ""){tiles[i].numeratorDim = 1};
if (tiles[i].denominatorDim == ""){tiles[i].denominatorDim = 1};
};
while (thereIsAMatch(tiles)){ // a bunch of code modifying tiles, but not tileArray
for (var i = 0; i < tiles.length; i++){
for (var j = 0; j < tiles.length; j ++) {
if (unitsMatch(tiles[i].numeratorUnit, tiles[j].denominatorUnit)) {
tiles[i].numeratorDim = parseInt(tiles[i].numeratorDim) - 1;
if (tiles[i].numeratorDim == 0){tiles[i].numeratorUnit = ""}
tiles[j].denominatorDim = parseInt(tiles[j].denominatorDim) - 1;
if (tiles[j].denominatorDim == 0){tiles[j].denominatorUnit = ""}
} // if unitsMatch
} // for j
} //for i
} //while thereIsAMatch
console.log(tileArray === tiles); //returns TRUE!! But tileArray hasnt been modified!!
return tiles;
} // function simplify
解决方案
您需要对此数组进行深层复制,因为现在 tile 和 tileArray 指向同一块内存(参考)。你可以用 tileArray = Arrays.from(tiles)
这是一篇有用的文章:https ://medium.com/@gamshan001/javascript-deep-copy-for-array-and-object-97e3d4bc401a
推荐阅读
- c++ - 类接受模板或模板模板参数
- go - gin-gonic 中的字节范围支持
- ffmpeg - RTMP 服务器无法流式传输视频(仅音频)
- x86 - 实模式操作系统中的动态内存分配
- c# - Input.GetKeyDown(KeyCode.E) 不工作
- jsp - 上传和读取文本文件jsp
- html - Express-handlebars 呈现纯文本而不是 HTML
- python - 在没有身份验证令牌的情况下使用 Python 和 Twitter API
- parameters - EF Core 3.1 executesqlInterpolated,如何在查询中添加out参数
- powershell - 从 Onenote 执行 powershell 脚本