我正在做一个javascript函数,它将输入一个字符串,并输出一个“海绵宝宝模拟文本”基本上,你输入“你好,这是一条给世界的消息”,你会得到"Hello,ThIS iS a MeSsAGe to the world“基本上,随机决定是否大写字母。我创建了一个函数,我认为它可以做到这一点,但它不起作用。下面是我在js控制台中测试的代码:
function memify(input) { // function called memify()
var il = input.length; // gets the length of the input
var newinput = input; // creates a new variable that will be changed from input.
for (var i=0;i>il;i++) {
var rng = Math.floor((Math.random()*2)); // random number between 0 and 1. 0 = upper 1 = lower
if (rng === 0) {
newinput.charAt(i).toUpperCase();
}
else {
newinput.charAt(i).toLowerCase();
}
}
return newinput;
}
var text = prompt();
var textmeme = memify(text);
alert(textmeme);
为什么这不起作用?我的代码中有错误吗?任何帮助都将不胜感激。
发布于 2019-12-22 22:06:20
当你这样做的时候
newinput.charAt(i).toUpperCase();
您正在创建一个新的大写字符,但是您没有对它做任何操作;它只是一个未使用的表达式,因此没有可见的更改。原语(包括字符串)是不可变的-你应该显式地将字符串重新赋值给其他东西(例如newString += newinput.charAt(i).toUpperCase();
)才能看到效果。
您还需要使用
for (var i = 0; i < il; i++) {
// ^
而不是
for (var i = 0; i > il; i++) {
// ^
否则,根本不会运行任何迭代。
function memify(input) { // function called memify()
var il = input.length; // gets the length of the input
let changedStr = '';
for (var i = 0; i < il; i++) {
var rng = Math.floor((Math.random() * 2)); // random number between 0 and 1. 0 = upper 1 = lower
if (rng === 0) {
changedStr += input.charAt(i).toUpperCase();
} else {
changedStr += input.charAt(i).toLowerCase();
}
}
return changedStr;
}
var text = prompt();
var textmeme = memify(text);
console.log(textmeme);
另一种选择是使用.map
,它看起来更干净:
const memify = input => [...input]
.map(char => Math.random() < 0.5 ? char.toUpperCase() : char.toLowerCase())
.join('');
console.log(memify(prompt()));
发布于 2019-12-22 22:15:29
或者更简洁、更安全、更好的解决方案:)。它不需要for循环,检查字符串的长度和其他容易出错的东西。
function memify(input) {
var rng = () => Math.random() > 0.5;
var res = input.split('').map( letter =>
rng() ? letter.toUpperCase() : letter.toLowerCase()
).join('');
return res;
}
var textmeme = memify("Hello World");
console.log(textmeme);
如果对您有帮助,请向上投票:)
https://stackoverflow.com/questions/59448340
复制