-2
votes

Comment dupliquer l'élément sur une carte (pas à la fin)

Je veux dupliquer un élément existant sur la carte. J'ai une carte des images, disons que j'ai [1,2,3] et je veux cloner ou dupliquer 2 donc je vais obtenir [1,2,2,3], comment puis-je faire ça?

i avoir des images galerie. J'ai un "bouton de clonage" que si vous voulez cloner une image, vous obtiendrez la même image suivante. Par exemple: (fleur, voiture, chat, eau) et que clone 'voiture' va nous amener (fleur, voiture, voiture, chat, eau). xxx

donc, J'ai trouvé mon article sur la carte, mais quand j'ai essayé de dupliquer, j'ai utilisé Concat, mais au lieu de cloner l'existant de [1,2,2,3], j'ai eu [1, [2,2], 3].


6 commentaires

Quand vous dites 'carte', voulez-vous dire un tableau?


Vous ne pouvez pas utiliser la fonction .map sur un tableau de la manière dont vous essayez de, d'ajouter des éléments. Ce que vous voulez faire est de trouver le tableau où vous souhaitez ajouter l'article et faire un .splice pour ajouter l'article


Utilisez cette documentation sur la façon d'ajouter un élément à un tableau à un index donné: développeur.mozilla.org/en-us/docs/web/javascript/reference/...


@Tkol je suis un peu confus parce que c'est une carte mais quand je le débogé, il ressemble à un tableau


Si c'est une carte, c'est-à-dire créé par nouvelle carte () , il ne disposera pas de la fonction .map sur elle. Je suis sûr que c'est un tableau


La fonction .map sur un tableau ne génère pas de carte, elle génère un autre tableau.


5 Réponses :


1
votes

Je suppose que la commande est importante? Vous pouvez toujours simplement aplatir la matrice à la fin? Peut-être quelque chose qu'un petit quelque chose comme ça. XXX


3 commentaires

Cela causera image pour être une référence à l'autre objet image, pas une copie, soyez prudent


@ Mosèraguzzini Il n'a jamais exprimé aucun besoin pour ne pas être une copie


Je pense que c'est une bonne pratique d'avoir des éléments individuels et non de références dans un tableau. Quoi qu'il en soit à l'aide de la carte () pour cette tâche est extrêmement faux. En fait, vous devez aplatir la matrice à la fin.



0
votes

Essayez avec cette solution plus simple, vous n'avez pas besoin mappe () code>

p>

cloneImage(dto) {
    const { images } = this.state;
    const imageIndex = images.find(
      element => element.id === dto.id
    );
    const elemnentClone = JSON.stringify(images[imageindex]);
    this.setState({
      images: [...images, elementClone]
});
  }


0 commentaires

1
votes

La fonction de carte renvoie toujours un élément, dans votre exemple, une seule "image" ou un tableau.

Vous voudrez peut-être examiner à la place. p>

cloneImage(oldArray, dto) {
  const newArray = []

  oldArray.forEach(image => {
    if (image.id === dto.id) {
      newArray.push(image)
    }

    newArray.push(image)
  }

  return newArray
}


0 commentaires

-1
votes

Webber a une bonne réponse, mais vous pouvez également épisser un élément dans un tableau avec ce code:

cloneImage(dto) {
    const { images } = this.state;
    let newImages = images.slice(0); // to clone the array
    let index = images.findIndex(image => image.id === dto.id);
    let imageToClone = images[index];

    newImages.splice(index, 0, imageToClone);

    this.setState({
        images: newImages
    });
}


0 commentaires

1
votes

Voici une belle méthode courte utilisant array.pototype.reduce xxx


1 commentaires

Avez-vous testé cela? Je ne pense pas que cela fonctionnera, car il ajoutera l'article correspondant deux fois, c'est sûr, mais le tableau n'aura pas d'autres éléments non correspondants.