朋友。这是我说的kata ...... https://www.codewars.com/kata/the-hashtag-generator/train/javascript
这是我输入的代码。每次测试调用我都会得到通过,但是有一个错误不会让我得到积分。
function generateHashtag (str) {
if(str.length > 140 || str.length === 0){
return false
} else {
let ht = str.split(' ').map((item) => item[0].toUpperCase() + item.slice(1)).join(" ")
return "#" + ht
}
}
这是我得到的错误。我知道必须有一个测试我失败了,因为它没有正确地进入.toUpperCase()方法,但我不能暗示在指令中会发生这种情况。
TypeError: Cannot read property 'toUpperCase' of undefined
at str.split.map
at Array.map
at generateHashtag
at Object.handleError
at ContextifyScript.Script.runInThisContext
at Object.runInThisContext
我对kata有关我的担忧的评论,但我真的不想错过这些观点。
欣赏任何启示。
答案 0 :(得分:1)
如果item [0]返回undefined,则字符串必须为空。也许你想做类似的事情:
str.split(' ').map(item => item.length > 0 ? item[0].toUpperCase() + item.slice(1) : '')
答案 1 :(得分:0)
这可能发生,因为测试用例是一个空字符串(空字符串表示一个包含任意数量空格但没有字母数字字符的字符串)
所以它将' '
(或类似的东西)传递给函数,并且您的拆分将字符串拆分为["", ""]
,每个索引中没有任何字符。
为了防止出现这种情况,您需要在函数开头执行trimmedStr = str.trim()
或str = str.trim()
之类的操作,以确保这些边缘情况不会漏掉。