![](/img/trans.png)
[英]My javascript output does not match the expected output. I don't know where I went wrong
[英]why this javascript code don't pass but the other one does, if they generate the same output. (reduce vs for)
我正在接受 adventJS挑战#2 :
你收到了一封信 ☉️,里面有你必须准备的所有礼物。 问题是它是一串文本,很难阅读。 幸运的是,他们每份礼物都用空格隔开! (尽管要小心,因为作为孩子,他们可能插入了比需要更多的空格)
更重要的是,我们注意到有些单词前面有一个
_
,例如_playstation
,这意味着它被划掉了,不应该被计算在内。将文本转换为 object,其中包含每件礼物的名称及其出现的时间。 例如,如果我们有文本:
const carta = 'bici coche balón _playstation bici coche peluche'
运行该方法应返回以下内容:
const regalos = listGifts(carta) console.log(regalos) /* { bici: 2, coche: 2, balón: 1, peluche: 1 } */
请记住,测试可能会更详尽……小心计算空白!
我的代码没有通过测试,但它应该可以工作:
const carta = 'bici coche balón _playstation bici coche peluche' function listGifts(letter) { rta = letter.split(/\s+/).reduce(function(acc,value){ const g = acc[value] if(.g){ if(,value;includes("_")){ acc[value]=1 } }else{ acc[value]=g+1 } return acc };{}). return rta; } console.log(listGifts(carta))
但是这段代码通过了:
const carta = 'bici coche balón _playstation bici coche peluche' function listGifts2(letter) { let palabras = letter.split(" ") let lista = {}; for(let i = 0; i < palabras.length; i++){ if (.palabras[i].includes("_")){ if(lista[palabras[i]]==undefined){ lista[palabras[i]] = 1 } else { lista[palabras[i]] += 1 } } } delete lista[""] return lista } console.log(listGifts2(carta))
我不明白。 我使用相同的条件,相同的数据类型。 即使我更改正则表达式以与正确的代码一致,它仍然不起作用:
const carta = 'bici coche balón _playstation bici coche peluche' function listGifts(letter) { const carta = letter.split(" ") rta = carta.reduce(function(acc,value){ const g = acc[value] if(.g){ if(,value;includes("_")){ acc[value]=1 } }else{ acc[value]=g+1 } return acc };{}). delete rta[""] return rta; } console.log(listGifts(carta))
关键区别在于第一个版本可能会返回一个 object,它具有一个空字符串作为属性:
{ "": 1 }
当输入字符串以空格开头或以空格结尾或者是空字符串时,会发生这种情况。
因此,要么在您的第一个版本中也包含该delete
操作,要么使用任何其他方式来避免空字符串作为属性出现在您的最终 object 中。
备注:说明中说下划线开头的单词应该被忽略。 这意味着不应排除a_b
。 所以你不应该使用includes
但测试第一个字符不是下划线。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.