Tengo una matriz de objetos en mi estado llamada names , estoy tratando de hacer una copia de esta matriz en otra matriz de objetos en el estado llamada shuffledNames , pero cuando barajo los shuffledNames usando el código a continuación, los names originales cambian las identificaciones para que coincidan las nuevas identificaciones barajadas. Vea las imágenes a continuación para ver un ejemplo. He intentado usar .concat(), .slice(). Ya no se que probar.
handleSort = () => { let tempName = [...this.state.names]; let shuffledNames = tempName; for (let i = shuffledNames.length; i-- > 1; ) { let j = Math.floor(Math.random() * i); let temp = shuffledNames[i]; shuffledNames[i] = shuffledNames[j]; shuffledNames[j] = temp; } shuffledNames.forEach((shuffledName, index) => { shuffledName.id = index; }); this.setState({ shuffledNames: shuffledNames }); };Este es mi estado antes de barajar

Este es mi estado después de barajar

El operador de propagación es un clon superficial, por lo que es una nueva matriz pero los mismos valores que son referencias a objetos, no objetos nuevos. Necesita encontrar o codificar su propia función de clonación o copia profunda. La última que usé fue la función de clonación de randa, pero eso se debió a que alguien más en mi equipo ya había importado esa biblioteca.