繁体   English   中英

为什么这个 javascript 代码没有通过而另一个代码通过了,如果它们生成相同的 output。(减少 vs for)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM