I wanted to make a function that swaps 2 elements of an array in Javascript, so I created this piece of code:
let arrayOne = ["elementA","elementB","elementC","elementD","elementE","elementF","elementG","elementH","elementI"];
function swapThatFails(element1,element2) {
arrayOne[arrayOne.indexOf(element1)] = element2;
arrayOne[arrayOne.indexOf(element2)] = element1;
console.log("arrayOne = ",arrayOne);
}
swapThatFails ("elementA", "elementC");
However, it makes no change at all in the original array.
I managed to make it work by obtaining apart the indexes of the array I want to swap:
let arrayTwo = ["elementA","elementB","elementC","elementD","elementE","elementF","elementG","elementH","elementI"];
function swapThatWorks(element1,element2) {
let index1 = arrayTwo.indexOf(element1);
let index2 = arrayTwo.indexOf(element2);
arrayTwo[index1] = element2;
arrayTwo[index2] = element1;
console.log("arrayTwo = ",arrayTwo);
}
swapThatWorks ("elementA", "elementC");
To me, they both are the same apart from the fact that the second makes it in 2 steps so it looks easier to be understood.
Why the first one does not work but the second one does?
let arrayOne = ["elementA","elementB","elementC","elementD","elementE","elementF","elementG","elementH","elementI"];
let arrayTwo = ["elementA","elementB","elementC","elementD","elementE","elementF","elementG","elementH","elementI"];
function swapThatFails(element1,element2) {
arrayOne[arrayOne.indexOf(element1)] = element2;
arrayOne[arrayOne.indexOf(element2)] = element1;
console.log("arrayOne = ",arrayOne);
}
function swapThatWorks(element1,element2) {
let index1 = arrayTwo.indexOf(element1);
let index2 = arrayTwo.indexOf(element2);
arrayTwo[index1] = element2;
arrayTwo[index2] = element1;
console.log("arrayTwo = ",arrayTwo);
}
swapThatFails ("elementA", "elementC");
swapThatWorks ("elementA", "elementC");
arrayOne[arrayOne.indexOf(element1)] = element2;finds the first index ofelement2(which is zero) and updates it withelement2.arrayOne[arrayOne.indexOf(element2)] = element1;finds the first index ofelement2(which is now zero) and updates it withelement1. So the code doesarrayOne[0] = "elementC"; arrayOne[0] = "elementA";resulting in net no change.