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). p> 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]. P > p>
5 Réponses :
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.
Cela causera image code> 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.
Essayez avec cette solution plus simple, vous n'avez pas besoin p> mappe () code> 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]
});
}
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
}
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
});
}
Voici une belle méthode courte utilisant array.pototype.reduce code>
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.
Quand vous dites 'carte', voulez-vous dire un tableau?
Vous ne pouvez pas utiliser la fonction
.map code> 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'articleUtilisez 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 () code>, il ne disposera pas de la fonction.map code> sur elle. Je suis sûr que c'est un tableauLa fonction
.map code> sur un tableau ne génère pas de carte, elle génère un autre tableau.