Estoy tratando de intercambiar miembros de arr. Pero obtengo [0, 0] como salida. Estoy esperando [1, 0].
const arr = [0, 1]; [arr[1],arr[0]] = arr; console.log(arr)Pero mientras hace esto, genera [1, 0] que creo que entiendo.
const arr = [0, 1]; [arr[1],arr[0]] = [arr[0], arr[1]]; console.log(arr)Su primer ejemplo es modificar la matriz a la que apunta arr y obtener sus valores de esa misma matriz, como si hubiera hecho esto:
const arr = [0, 1]; // Here, `arr` is `[0, 1]` arr[1] = arr[0]; // <=== Changes `arr[1]`... // Now, `arr` is `[0, 0]` arr[0] = arr[1]; // <=== ...so the new value of `arr[1]` is used here. // Still `[0, 0]` Su desestructuración está haciendo lo mismo: usar arr[1] después de que haya sido cambiado por la asignación de desestructuración.
Su segundo ejemplo es modificar la matriz a la que apunta arr , pero solo después de obtener los valores antiguos de la matriz en una nueva matriz:
const arr = [0, 1]; const newArray = [arr[0], arr[1]]; // Here, `arr` is `[0, 1]`, `newArray` is `[0, 1]` arr[1] = newArray[0]; // <=== Changes `arr[1]`... // Here, `arr` is `[0, 0]`, `newArray` is still `[0, 1]` arr[0] = newArray[1]; // <=== ...but that doesn't affect `newArray[1]`, so this works. // Here, `arr` is `[1, 0]`, `newArray` is still `[0, 1]` Eso funciona, porque aunque arr[1] fue cambiado por la asignación de desestructuración, el nuevo valor para arr[0] no proviene de arr[1] , sino de newArray[1] .