首页 > 解决方案 > 如何比较自动生成的对象数组以避免重复?

问题描述

我正在做一个艺术项目。在其中,我在按下某个键时显示图像。就像如果您按“a”,它会显示抽象“a”的图像。问题是我想在显示这些图像后对其进行操作,因此我尝试将它们存储到一个中,array但是由于draw()p5.js 的功能,它变得越来越大。

我试图在创建对象时比较它们,但它不起作用所以我正在寻找一种方法来比较对象是否存在。

我的代码是这样的:

draw() {
  if (letterToDisp != 0 && ){
    new Objet(temp, letterToDisp);//temp is a number random {0,1}
  }
}

function Objet(rand, lettre) {
  if (CheckIfExistObject(rand, lettre)) {
    img[nbLetter++] = new Img(rand, lettre);
  }
  else {
    new Img(rand, lettre);
  }
}

function CheckIfExistObject(alea, lettre) {
  var objectsAreSame = true;
  img.forEach(function (test) {
    if (test == new Img(alea, lettre)) {
      objectsAreSame = false;
      return objectsAreSame;
    }
  });

  return objectsAreSame;
}

所以这会为我生成一个无限的数组,object所以我没有注意到如何比较它们并查看如何比较它们。我需要帮助的地方是如何构建我的CheckIfExistObject功能。

标签: javascriptimageobjectp5.js

解决方案


Javascript

const pressedKeys = {};

function createImage(character) {
  const image = character;

  // ... you should actually build your image here  
  pressedKeys[character] = image;

  return image;
}

document.addEventListener('keypress', (event) => {
  const character = event.key.toLowerCase();
  const alreadyPressed = pressedKeys[character];

  return alreadyPressed || createImage(character);
});

我想这就是你要找的。在pressedKeys对象中,您可以跟踪已按下的键。在每次按键时,您检查当前键是否已被按下,如果是,则返回您想要存储的任何内容。如果尚未按下,则创建一个新图像,将其存储并返回以供使用。

希望能帮助到你!


推荐阅读