首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >javascript数组似乎改变了我的自身

javascript数组似乎改变了我的自身
EN

Stack Overflow用户
提问于 2018-07-01 08:41:52
回答 3查看 43关注 0票数 0

我正在使用P5.js,并尝试将一些值保存在一个数组中,然后创建该数组的副本进行操作。不幸的是,当我操作第二个数组时,原来的数组也发生了变化,我不知道为什么。

代码语言:javascript
复制
var particels = []
var particelsCopy = []

function calcInitialPositions(){

  for (var i = 0; i < pixels.length; i+=4) {
    if (pixels[i] == 0){
      var x_ = i  % width
      var y_ = i / width / 2
      var coords_ = {x : x_ , y : y_}
      particels.push(coords_)
    }
  };
}

function setup() {  
  loadPixels()
  calcInitialPositions();
  particelsCopy = particels
}

function draw() {
  for (var i = 0; i < particelsCopy.length; i++) {
    particelsCopy[0].x = 99
  };
  console.log(particel[0].x)
}

控制台打印99

EN

回答 3

Stack Overflow用户

发布于 2018-07-01 08:51:38

Javascript中的=操作符通过引用而不是值来分配对象,其中包括数组。所以这句话:

代码语言:javascript
复制
particelsCopy = particels

正在将particelsCopy重新定义为particels的别名...在这之后,它们是相同的数组。您需要按值复制数组,如下所示:

代码语言:javascript
复制
particelsCopy = particels.slice();

注意:这只是一个浅层复制,如果数组包含对象或数组,它们将通过引用复制,您将不得不在子项上重复此操作(例如,coords_对象,尽管对于对象,模式是copy = Object.assign({},original);)。

要按值深度复制所有内容,您必须对对象/数组的每个子级执行此操作。许多像jQuery这样的库都有现成的函数来帮助实现这一点。

票数 1
EN

Stack Overflow用户

发布于 2018-07-01 08:53:16

这行代码:

代码语言:javascript
复制
particelsCopy = particels

复制数组引用,而不是数组中的元素。

您需要分配一个新的数组对象,然后复制元素。如果元素是对象,则还必须对它们进行浅(或深)复制。此解决方案使用Object.assign()进行浅层复制。

代码语言:javascript
复制
particelsCopy = [] // already done previously
for (var i=0; i<particels.length; i++){
   particelsCopy[i] = Object.assign({}, particels[i]};
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-01 08:53:40

您可以使用解构来复制数组中的对象

代码语言:javascript
复制
particelsCopy = particels.map(obj => ({...obj}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51119591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档