Ich habe die folgende Methode, um zwei Arrays zu vergleichen, eines aus Requisiten und eines aus meiner Komponente. Ich füge jedes Element, das im Requisiten-Array, aber nicht in meinem Komponenten-Array vorhanden ist, in ein drittes Array ein und füge eine Eigenschaft namens „destroy: true“ hinzu, damit ich es an das Backend senden und aus der Datenbank löschen kann.
Aus irgendeinem Grund werden jedoch meine Requisiten aktualisiert und nicht die Variablen, die ich in der Methode verwende. Ich bin mir nicht ganz sicher, warum das passiert, da ich nicht direkt auf die Requisite verweise, aber ich kopiere ihren Inhalt in eine Variable innerhalb der Methode.
updateArray(){ let updatedArray = [] let oldArray = [...this.props.array] oldArray.forEach(element => { if(this.componentArray.indexOf(element) > -1){ updatedArray.push(element) }else{ let newElement = element newElement.destroy = true updatedArray.push(newElement) } }) return updatedArray },
Warum passiert das? Die anderen Elemente in meiner Komponente funktionieren einwandfrei, nur bei diesem gibt es Probleme.
是的,你正在将
this.props.array
数组的元素复制到一个新的方法本地数组中,但是由于数组的元素是对象,最终两个数组都包含相同的对象(对象的引用)你可以使用扩展运算符
let newElement = { ...element }
创建原始元素的浅拷贝- 这将创建一个全新的对象,并复制原始对象的所有属性。但要注意,如果原始对象的任何属性包含数组/对象,你将面临相同的问题...只是深度更深一层