亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Javascript 中用于交換數組中的 2 個元素的這段代碼不起作用?

為什么 Javascript 中用于交換數組中的 2 個元素的這段代碼不起作用?

牛魔王的故事 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']。這不是你所期望的!


另一方面,如果您首先搜索元素,獲取正確的索引然后替換元素,它會按預期工作。


查看完整回答
反對 回復 2022-07-08
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號