为什么我不能在reduce回调元素上使用string.charCodeAt()

我有以下代码,用于尝试获取一个单词的charCodes的总和。(为什么我需要这个对于我的问题并不重要)


function codepoints(string) {

    return string.split("").reduce((arr, next) => arr.charCodeAt(0) + next.charCodeAt(0))

}

console.log(codepoints("abc"));

但是JavaScript给了我错误:


arr.charCodeAt不是函数


当询问“ arr”的类型时,它是一个字符串。但是为什么我不能在其上使用charCodeAt方法呢?


Helenr
浏览 200回答 3
3回答

DIEA

您使用的方法不Array.reduce正确,回调的第一个参数是部分结果或累加器。在Array.reduce需要回调函数需要4点以上的参数,你的情况,你所需要的前两个。该reduce函数的语法为reduce(callback[, initialValue]):callback函数,对数组中的每个元素执行,带有四个参数:累加器累加回调的返回值;它是先前在回调的上一次调用中返回的累计值,或者如果提供的话,则返回initialValue(请参见下文)。currentValue数组中正在处理的当前元素。**initialValue可选用作首次调用回调的第一个参数的值。如果未提供初始值,则将使用数组中的第一个元素。在没有初始值的空数组上调用reduce()是错误的。要找到总和,请传递初始值0,然后向其添加数组中的后续元素:function codepoints(string) {    return string.split('').reduce( (acc,next) => acc + next.charCodeAt(0), 0)}console.log(codepoints("abc"));

眼眸繁星

当您不指定initialValue whel调用时,Array.reduce则:accumulator 将在第一次迭代中包含第一个数组元素accumulator 将包含后续迭代中的累积值在您的示例中,您可以检查累加器变量并相应地求和:function codepoints(string) {  return string    .split("")    .reduce((acc, next) => (typeof acc === "string" ? acc.charCodeAt(0) : acc) + next.charCodeAt(0))}console.log(codepoints("abc"));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript