search

Home  >  Q&A  >  body text

javascript如何实现字符串循环移位?

javascript对字符串进行循环移位操作,比如"abcde"左移两位变成"cdeab",请问如何实现?

伊谢尔伦伊谢尔伦2934 days ago842

reply all(3)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 16:00:36

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    <code>function shiftLeft(str, n) {

        var len = str.length;

        // 因为是循环移动,所以需要处理移动位数大于字符串长度的情况

        n = n % len;

     

        return str.substring(n, len) + str.substring(0, n);

    }

     

    var s= shiftLeft('abcdefg', 2);

    console.log(s); // "cdefgab"

     

    s = shiftLeft('abcdefg', 10);

    console.log(s); // "defgabc"</code>

    reply
    0
  • 黄舟

    黄舟2017-04-10 16:00:36

    之前写成右移了,改成左移,顺便借鉴了一下 @Terry_139061 的 n = n % len

    直接用字符串截取的处理方法

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    <code class="javascript">function shiftCircle(s, n) {

        n = n % s.length;

        var right = s.substr(n);

        return right + s.substr(0, n);

    }

     

    (function() {

        var s = "abcdefg";

        console.log(shiftCircle(s, 2));

    })();</code>

    用数组的处理方法

    这个方法可以扩展到数组而不仅限字符串

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    <code class="javascript">function shiftCircle(s, n) {

        n = n % s.length;

        var a = s.split("");

        var left = a.splice(0, n);

        return a.concat(left).join("");

    }

     

    (function() {

        var s = "abcdefg";

        console.log(shiftCircle(s, 2));

    })();</code>

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 16:00:36

    我提供一个思路,循环左边两位,然后依次添加到后面的字符串尾。

    reply
    0
  • Cancelreply