我是javascript的初学者,我尝试编写一个简单的解码功能。 在这里:
function decode(text) {
let letter, count, i, result, letters;
result = "";
for (i = 0; i < text.length; i++) {
count = text[i];
if (typeof Number(count) === "number") {
count = Number(count);
console.log(count); // this line only for testing
letter = text[i + 1];
letters = letter.repeat(count);
result += letters;
console.log(result); // this line only for testing
} else {
result += text[i];
}
}
return result;
}
console.log(decode("v2rt3b2x"));
我需要帮助来理解为什么当typeof Number(count)===“ number”为false时,为什么不会跳过if子句。 它返回以下内容:
NaN
VM708:12
VM708:8 2
VM708:12 rr
VM708:8 NaN
VM708:12 rr
VM708:8 NaN
VM708:12 rr
VM708:8 3
VM708:12 rrbbb
VM708:8 NaN
VM708:12 rrbbb
VM708:8 2
VM708:12 rrbbbxx
VM708:8 NaN
正如我说的,我是一个初学者,所以请保持怜悯...
我得到了正确的答案,但是我稍后会尝试找出计数的原因-1有用,现在我感谢大家的帮助。
function decode(text) {
let letter, count, i, result, letters;
result = "";
for (i = 0; i < text.length; i++) {
count = parseInt(text[i]);
if (!isNaN(count)) {
//console.log(count); // this line only for testing
letter = text[i + 1];
letters = letter.repeat(count-1);
//console.log(letters);
result += letters;
//console.log(result); // this line only for testing
} else {
result += text[i];
}
}
return result;
}
console.log(decode("v2rt3b2xz3f2d 2s2 j"));
vrrtbbbxxzfffdd ss j
答案 0 :(得分:3)
typeof Number(x)
始终为'number'
,无论x
是什么。您实际上是将x
类型转换为'number'
类型。
因此if子句始终为true
,永远不会被跳过。
答案 1 :(得分:3)
问题在这里。
typeof Number(count) === "number"
当您尝试将某些内容转换为数字时,如果不可能,您将获得NaN
作为值。而typeof NaN
是number
。
详细了解NaN
在您的if语句中添加Number.isNaN
检查将是解决方案。
function decode(text) {
let letter, count, i, result, letters;
result = "";
for (i = 0; i < text.length; i++) {
count = text[i];
var parsedNumber = Number(count);
if (!Number.isNaN(parsedNumber)) {
letter = text[i + 1];
letters = letter.repeat(parsedNumber);
result += letters;
console.log(result); // this line only for testing
} else {
result += text[i];
}
}
return result;
}
console.log(decode("v2rt3b2x"));
答案 2 :(得分:2)
除了错误的比较之外,您还可以对字符串进行适当的分割并映射重复的字符。
服用
'v2rt3b23x'
并拆分
[ "v2", "r", "t3", "b23", "x" ]
和映射
[ "vv", "r", "ttt", "bbbbbbbbbbbbbbbbbbbbbbb", "x" ]
您获得join
'vvrtttbbbbbbbbbbbbbbbbbbbbbbbx'
console.log(
'v2rt3b23x'
.split(/(?=\D)/)
.map(v => v[0].repeat(v.slice(1) || 1))
.join('')
);