javascript循环移动数组

<!doctype html>
<head>
    <meta charset = "utf-8" />
</head>

<body>
    <script>
        /**
            循环移动数组 => ab转换为ba => (a逆置b逆置)逆置 = ba
            @arr 移动的数组
            @count 移动多少位 正数表示左移,负数表示右移 
        */
        const recycMoveArray = function(arr,count){
            let end = arr.length - 1; //获取数组的结束下标
            /*
            //左移
            reverse(0, count-1); //a逆置
            reverse(count, end); //b逆置
            reverse(0, end); //整体逆置
            
            //右移
            reverse(0, end + count); //实际上可以转成左移情况
            reverse(end + count + 1, end);
            reverse(0, end);
            */
            /*
            let leftArrEnd = 0; //a数组的结束下标
            
            //判断左移还是右移
            if(count > 0){
                leftArrEnd = count - 1;
            }else{
                leftArrEnd = end + count; 
            }
            */
            let leftArrEnd = count > 0 ? --count : end + count;
            reverse(arr,0,leftArrEnd);
            reverse(arr,leftArrEnd+1,end);
            reverse(arr,0,end);
        }
        /**
            将数组逆置的函数
            @param arr 逆置的数组
            @param start 逆置数组的开始下标
            @param end 逆置数组的结束下标    
        */
        const reverse = function(arr,start,end){
            //如果指针不等
            while(start <= end){ //start != end是有缺陷的,当是偶数个时不能跳出
                //调换start和end指向的值
                let temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
                //指针移动
                start++;
                end--;    
            }
        }
        let arr = new Array("a","b","c","d","e","f","g","h"); 
        recycMoveArray(arr,3);
        document.write(arr); //defghabc
    </script>
</body>

</html>

 

posted @ 2018-04-19 15:50  web_小隆  阅读(1421)  评论(0编辑  收藏  举报