牛魔王的故事
2022-07-08 09:55:54
我想創建一個在 Javascript 中交換數組的 2 個元素的函數,所以我創建了這段代碼: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");但是,它對原始數組沒有任何改變。我設法通過獲取要交換的數組的索引來使其工作: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");對我來說,它們都是相同的,除了第二個是分兩步完成的,所以看起來更容易理解。為什么第一個不起作用,而第二個起作用?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");
1 回答

四季花海
TA貢獻1811條經驗 獲得超5個贊
讓我們考慮一下
function swapThatFails(element1,element2) {
arrayOne[arrayOne.indexOf(element1)] = element2;
arrayOne[arrayOne.indexOf(element2)] = element1;
console.log("arrayOne = ",arrayOne);
}
假設數組是['a','b']并且你用swapThatFails('a', 'b').
首先你搜索element1并放在element2那里
arrayOne[arrayOne.indexOf(element1)] = element2;
你的數組變成['b','b']
然后你搜索element2并放在element1那里。但是數組已經被修改了!第一次出現element2的不是原來的位置,而是新的位置,也就是上一步剛剛被替換的位置。
因此這
arrayOne[arrayOne.indexOf(element2)] = element1;
查找b為第一個元素并將其替換為a. 你得到了['a','b']。這不是你所期望的!
另一方面,如果您首先搜索元素,獲取正確的索引然后替換元素,它會按預期工作。
添加回答
舉報
0/150
提交
取消