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

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

Vue使用項目值數組更新狀態

Vue使用項目值數組更新狀態

泛舟湖上清波郎朗 2022-10-27 16:39:03
大家好我有一個簡單的應用程序,我嘗試使用 vue 可視化插入排序算法,我設法編寫了一個函數,對項目列表進行排序并返回算法每個步驟的數組,這個數組的最后一個數組是完全排序的版本原始數組,所以我想要的是更新狀態并使用從函數返回的步驟數組的每個值設置原始未排序數組;這是我的插入排序功能const insertionSort = (unsortedItems) => {let sortedList = [...unsortedItems];let sortingProcess = [];for (let i = 1; i < sortedList.length; i++) {   let current = sortedList[i];   let j = i - 1;   while (j >= 0 && sortedList[j] > current) {      sortedList[j + 1] = sortedList[j];      j--;      sortingProcess.push(sortedList);    }    sortedList[j + 1] = current;    sortingProcess.push(sortedList);   }   return sortingProcess; }; export default insertionSort;在這里我正在嘗試更新我的狀態insertionSort(this.unsortedList).forEach(round =>    setTimeout(() => (this.unsortedList = round), 600)  );我希望上面的代碼每 600 毫秒更新一次我的狀態,但是當我單擊排序按鈕時,數組會立即排序,我看不到排序過程的每個步驟。那么我的代碼有什么問題?
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

這不是 Vue 特定的問題。它與最流行的 javascript 面試問題之一有關。forEach() 正在遍歷數組并為每個項目設置超時,因為它沒有閉包范圍。所有項目將同時執行:從現在起 600 毫秒。可能的解決方案是:

insertionSort(this.unsortedList).forEach((round, i) =>
    setTimeout(() => (this.unsortedList = round), i * 600)
  );

在這里閱讀更多


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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