// 二维数组环形遍历<br>const arr = [<br> [1, 2, 3, 31],<br> [4, 5, 6, 61],<br> [7, 8, 9, 91],<br> [10, 11, 12, 13]<br>];<br>const arr1 = [<br> [1, 2, 3, 31],<br> [4, 5, 6, 61],<br> [7, 8, 9, 91]<br>];<br>const arr2 = [<br> [1, 2, 3],<br> [4, 5, 6],<br> [7, 8, 9],<br> [10, 11, 12]<br>];<br><br>circleTraverse(arr2);<br>
function circleTraverse(arr) {<br> let width = arr[0].length;<br> let height = arr.length;<br><b> let level = Math.ceil(Math.max(width, height) / 2);</b><br> <br> // 遍历第几层<br><b> // 最外层的为 0 层,从 arr[0][0] 开始<br> // 里面一层为 1 层,从 arr[1][1] 开始</b><br> function traverseLevel(n) {<br> let colEnd = width - n - 1,<br> colStart = n;<br> let rowEnd = height - n - 1,<br> rowStart = n;<br> // up<br> for (let i = colStart; i <= colEnd; i++) {<br> console.log(arr[rowStart][i]);<br> }<br> // right<br> for (let i = rowStart + 1; i <= rowEnd; i++) {<br> console.log(arr[i][colEnd]);<br> }<br> // bottom<br><b><font color="#c41230"> if (rowEnd != rowStart)</font></b> {<br> for (let i = colEnd - 1; i >= colStart; i--) {<br> console.log(arr[rowEnd][i]);<br> }<br> }<br> // left<br><b><font color="#c41230"> if (colEnd != colStart)</font> </b>{<br> for (let i = rowEnd - 1; i >= rowStart + 1; i--) {<br> console.log(arr[i][colStart]);<br> }<br> }<br><b><font color="#c41230"> if (++n <= level) {<br> traverseLevel(n);<br> }</font></b><br> }<br> traverseLevel(0);<br>}<br>