你如何迭代每个x点的数组并用字母替换?

时间:2017-08-21 15:35:29

标签: javascript

/ 编写一个名为weave的函数,它接受一个输入字符串和数字。该函数应返回每个第x个字符替换为'x'的字符串。 /

    function weave(word,numSkip) {
      let myString = word.split("");
      numSkip -= 1; 
      for(let i = 0; i < myString.length; i++)
      {
        numSkip += numSkip;
        myString[numSkip] = "x";
      }
      let newString = myString.join();
      console.log(newString);
    }

    weave("weave",2);

我一直在无限循环。我相信我要找的答案是“wxaxe”。

7 个答案:

答案 0 :(得分:1)

你需要测试每个循环以检查它是否是跳过。像下面这样简单的事情会做:

function weave(word,numSkip) {
    var arr = word.split("");

    for(var i = 0; i < arr.length; i++)
    {
        if((i+1) % numSkip == 0) {
            arr[i] = "x";
        }
    }

    return arr.join("");
}

Here is a working example

或者,您可以使用map函数:

function weave(word, numSkip) {
  var arr = word.split("");

  arr = arr.map(function(letter, index) {
    return (index + 1) % numSkip ? letter : 'x';
  });

  return arr.join("");
}

Here is a working example

这是一个更可重复使用的函数,允许指定用于替换的字符:

function weave(input, skip, substitute) {
  return input.split("").map(function(letter, index) {
    return (index + 1) % skip ? letter : substitute;
  }).join("");
}

叫做:

var result = weave('weave', 2, 'x');

Here is a working example

答案 1 :(得分:1)

你不需要一个数组,字符串连接就可以了,还有模运算符:

function weave(str,x){
 var result = "";
 for(var i = 0; i < str.length; i++){
  result += (i && (i+1)%x === 0)?"x":str[i];
 }
 return result;
}

使用数组:

const weave = (str,x) => str.split("").map((c,i)=>(i&&!((i+1)%x))?"x":c).join("");

答案 2 :(得分:1)

这是另一种解决方案,将for loop增加numToSkip参数。

function weave(word, numToSkip) {
    let letters = word.split("");
    for (let i=numToSkip - 1; i < letters.length; i = i + numToSkip) {
        letters[i] = "x"
    } 
    return letters.join("");
}

答案 3 :(得分:0)

你每次都在循环中获得更多的信息,所以你的循环是无限的。 尝试这样的事情:

for(let k = 1; k <= myString.length; k++)
  {
    if(k % numSkip == 0){
         myString[k-1]='x';
      }
  }

答案 4 :(得分:0)

字符串是不可变的,你需要一个新的字符串作为结果并连接实际的字符或替换。

function weave(word, numSkip) {
    var i, result = '';

    for (i = 0; i < word.length; i++) {
        result += (i + 1) % numSkip ? word[i] : 'x';
    }
    return result;
}

console.log(weave("weave", 2));
console.log(weave("abcd efgh ijkl m", 5));

答案 5 :(得分:0)

看看你有什么,我相信你得到错误的原因是因为你更新numSkip的方式,它最终变得大于 myString.length。在我的代码片段中,我使{i}增加numSkip,这可以防止循环在i大于myString.length时执行。请随时提出问题,我会尽力澄清!

JSFiddle我的解决方案(查看开发者控制台以查看输出。

   function weave(word,numSkip) {
      let myString = word.split("");
      for(let i = numSkip - 1; i < myString.length; i += numSkip)
      {
        myString[i] = "x";
      }
      let newString = myString.join();
      console.log(newString);
    }

    weave("weave",2);

答案 6 :(得分:0)

您可以使用更少行代码执行此操作:

function weave(word, numSkip) {
  word = word.split("");
  for (i = 0; i < word.length; i++) {
    word[i] = ((i + 1) % numSkip == 0) ? "x" : word[i];
  }
  return word.join("");
}

var result = weave("weave", 2);
console.log(result);