javascript字符串字符替换

标签 javascript arrays setinterval

我正在解决 w3resource js 问题之一,如下:

编写一个 JavaScript 程序,通过定期从字符串末尾删除一个字母并将其附加到前面,以正确​​的方向旋转字符串“w3resource”。

我已经通过以下方式解决了这个问题:
HTML:

<div id="target0" style="margin: 50px auto; text-align: center;">w3resource</div>
<div id="target1" style="margin: 50px auto; text-align: center;">w3resource</div>

JS:

var solution = (function(){

  function htmlToArr(targetId) {
    targetId = document.getElementById(targetId);
    let targetContents = targetId.innerHTML;
    let letters = targetContents.split("");

    return letters;
  }

  function arrFirstToLast(arr) {
    first = arr.splice(0, 1);
    arr.splice(arr.length, 0, first[0]);
  }

  function arrLastToFirst(arr) {
    let last = arr.splice(arr.length-1, 1);
    arr.splice(0, 0, last[0]);
  }

  function setHtml(targetId, html) {
    targetId = document.getElementById(targetId);
    targetId.innerHTML = html;
  }

  function rotateString(targetId, direction = "left") {
    letters = htmlToArr(targetId);
    setInterval(function() {
      if (direction === "left") {
        arrFirstToLast(letters);
      } else if (direction === "right") {
        arrLastToFirst(letters);
      }
      let str = letters.join("");
      setHtml(targetId, str)
    }, 1500)
  }

  return {
    rotateString: rotateString
  }
})();

我已经实现了一个选项,可以沿一个方向或另一个方向旋转字符串。 当我有一个目标字符串时,它工作正常:

/*case 0 - one target, works good in both directions*/
solution.rotateString("target0", "right");

当我有两个目标字符串时,它仍然有效,但第二个目标字符串比第一个目标字符串延迟一个字母:

/* case 1 - two targets, same direction, works, non-synced letters */
solution.rotateString("target0");
solution.rotateString("target1");

当我有两个目标字符串并且我想向不同方向旋转它们时,它只会移动第一个目标中的一个字母并停止:

/* case 2 - two targets, different direction, doesen't work */
solution.rotateString("target0", "left");
solution.rotateString("target1", "right");

我可以通过为两个方向实现两个不同的函数来修复我的情况 2。但我想了解,为什么它会失败,以及我在这个 setInterval if-statement 实现中犯了什么错误。

另外,我不知道如何在情况 1 中同步字母移动。

这是笔: https://codepen.io/t411tocreate/pen/zPqVgg?editors=1010

谁能解释一下吗?

最佳答案

您正在使用全局letters变量。

letters = htmlToArr(targetId);

应该是局部变量:

var letters = htmlToArr(targetId);

关于javascript字符串字符替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121903/

相关文章:

javascript - 在 for 循环 Javascript 中设置间隔

javascript - 为什么 Javascript 在设置变量时速度很慢?

Javascript POST 请求不起作用

javascript - 如何在分配给数组索引的对象上调用方法?

javascript - 编写 Array.every() 函数

arrays - Opencv 2.4.0 : Load image through unsigned char array

javascript - 多个 .on ('click' ... 函数仅绑定(bind)到第一个 <div>

javascript - 如何禁用 ExtJS 中网格上的复选框?

javascript - (Javascript) 需要帮助将对象转换为数组

javascript - 如何动画 jquery load()