如何初始化对象数组

问题描述 投票:1回答:2

以下p5js代码无法正常工作,由于数组中的对象是对花朵的引用,我如何用不同的值初始化对象?

var flowers;
var flower;

function setup()
{
    createCanvas(1000,500);
    base_x = width/2;
    base_y = height - 50;

    flowers = [];

    flower = {
        base_x: 0,
        base_y: height - 50,
        stem_h: 100,
        col: color(255,50,50)
    }

    for(var i = 0; i < 10; i++)
    {
        flower.base_x = i * 100;
        flower.stem_h = random(50,400);
        flower.col = color(
            random(0,255), 
            random(0,255),
            random(0,255)
            );
        flowers.push(flower);

    }
}
javascript
2个回答
1
投票

您可以通过以下三种方法中的任何一种来取消引用花对象,然后将其压入数组:

flowers.push(flower);行应为

flowers.push(Object.assign({}, flower));

OR

flowers.push({...flower});

OR

flowers.push(JSON.parse(JSON.stringify(flower)));

0
投票

如何将不同的对象推入数组,而不是一遍又一遍地更改同一对象。

var flowers = [];

function setup() {
  createCanvas(1000, 500);
  base_x = width/2;
  base_y = height - 50;

  for (var i = 0; i < 10; i++) {
    // Creates a new object in every iteration.
    // And there's no point in defining this variable globally.
    var flower = {
      base_x: i * 100,
      base_y: height - 50,
      stem_h: random(50, 400),
      col: color(
        random(0, 255),
        random(0, 255),
        random(0, 255)
      )
    };

    flowers.push(flower);
  }
}

甚至

var flowers = Array.from({length: 10}, function(_, i){
  return {
    base_x: i * 100,
    base_y: height - 50,
    stem_h: random(50, 400),
    col: color(
      random(0, 255),
      random(0, 255),
      random(0, 255)
    )
  };
});
© www.soinside.com 2019 - 2024. All rights reserved.