<script>
var immutable = "";
var count = 0;
function uncensor(str1, str2) {
for (var i = 0; i < str.length; i++) {
if (str1[i] == "*") {
immutable =
str1.slice(0, i) +
str2[count] +
str1.slice(i + 1, str1.length - 1);
count++;
}
}
return immutable;
}
document.write(uncensor("Wh*r* d*d my v*w*ls g*?", "eeioeo"));
// uncensor("Wh*r* d*d my v*w*ls g*?", "eeioeo")
</script>
我的逻辑是在每次出现 "*"
时更新不可变变量。所以在循环结束时所有的"*"
都会被str2中的字符一个一个替换。
我希望结果是“Where did my vowels go?
”
没有输出。
最佳答案
您可以尝试遍历输入并在数组中捕获结果:
var immutable = "";
var count = 0;
function uncensor(str1, str2) {
let result = [];
for (var i = 0; i < str1.length; i++) {
if (str1[i] == "*") {
result.push(str2[count++]);
} else {
result.push(str1[i]);
}
}
return result.join("");
}
console.log(uncensor("Wh*r* d*d my v*w*ls g*?", "eeioeo"));
编辑:字符串是 immutable 的事实意味着每次您使用 splice
或 +
字符时,您都会创建一个新字符串。如果你想将你的方法与 splice
一起使用,你需要将 str
的部分与 str2
中的字符连接起来,如下所示,但是上面的解决方案应该是性能更高:
var result = "";
var count = 0;
var lastCensored = 0;
function uncensor(str1, str2) {
for (var i = 0; i < str1.length; i++) {
if (str1[i] == "*") {
result +=
str1.slice(lastCensored, i) +
str2[count++];
lastCensored = i + 1;
}
}
return result + str1.slice(lastCensored, str1.length);
}
document.write(uncensor("Wh*r* d*d my v*w*ls g*?", "eeioeo"));
// uncensor("Wh*r* d*d my v*w*ls g*?", "eeioeo")
关于javascript - 给定一个截尾字符串和一个截尾元音字符串,返回原始的未截尾字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231116/