/ 编写一个名为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”。
答案 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("");
}
或者,您可以使用map
函数:
function weave(word, numSkip) {
var arr = word.split("");
arr = arr.map(function(letter, index) {
return (index + 1) % numSkip ? letter : 'x';
});
return arr.join("");
}
这是一个更可重复使用的函数,允许指定用于替换的字符:
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');
答案 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);