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

Javascript 为什么我不能在reduce回调的元素中使用string.charCodeAt(),javascript,arrays,string,reduce,Javascript,Arrays,String,Reduce,我有下面的代码试图得到一个单词的字符码的总和。我为什么需要它对我的问题并不重要 function codepoints(string) { return string.split("").reduce((arr, next) => arr.charCodeAt(0) + next.charCodeAt(0)) } console.log(codepoints("abc")); 但是JavaScript给了我一个错误: arr.charCodeAt不是一个函数 当询问'arr'的类

我有下面的代码试图得到一个单词的字符码的总和。我为什么需要它对我的问题并不重要

function codepoints(string) {
    return string.split("").reduce((arr, next) => arr.charCodeAt(0) + next.charCodeAt(0))
}
console.log(codepoints("abc"));
但是JavaScript给了我一个错误:

arr.charCodeAt不是一个函数


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

您犯了两个错误

您不需要将charCodeAt应用于其char代码的Numbersum数组。 还将0作为第二个参数传递,以减少arr的初始值 函数代码点字符串{ 返回string.split.reduce arr,next=>arr+next.charCodeAt0,0 }
console.logcodepointsabc 你犯了两个错误

您不需要将charCodeAt应用于其char代码的Numbersum数组。 还将0作为第二个参数传递,以减少arr的初始值 函数代码点字符串{ 返回string.split.reduce arr,next=>arr+next.charCodeAt0,0 } console.logcodepointsabc 如果使用不正确,回调的第一个参数是部分结果或累加器

reduce接受一个回调函数,该函数本身又接受四个参数,在您的情况下,需要前两个参数

reduce函数的语法为reducecallback[,initialValue]:

要对数组中的每个元素执行的回调函数,包含四个参数:

累加器累加回调的返回值;它是上一次返回的累积值 调用回调或initialValue(如果提供),请参见下文

currentValue数组中正在处理的当前元素**

initialValue用作第一个参数的第一个参数的可选值 回调函数的调用。如果未提供初始值,则第一个 将使用数组中的元素。在空数组上调用reduce 没有初始值是错误的

要查找和,请传递初始值0,然后将数组中的后续元素添加到其中:

函数代码点字符串{ 返回string.split.reduce acc,next=>acc+next.charCodeAt0,0 } console.logcodepointsabc 如果使用不正确,回调的第一个参数是部分结果或累加器

reduce接受一个回调函数,该函数本身又接受四个参数,在您的情况下,需要前两个参数

reduce函数的语法为reducecallback[,initialValue]:

要对数组中的每个元素执行的回调函数,包含四个参数:

累加器累加回调的返回值;它是上一次返回的累积值 调用回调或initialValue(如果提供),请参见下文

currentValue数组中正在处理的当前元素**

initialValue用作第一个参数的第一个参数的可选值 回调函数的调用。如果未提供初始值,则第一个 将使用数组中的元素。在空数组上调用reduce 没有初始值是错误的

要查找和,请传递初始值0,然后将数组中的后续元素添加到其中:

函数代码点字符串{ 返回string.split.reduce acc,next=>acc+next.charCodeAt0,0 } console.logcodepointsabc 当您在调用时未指定initialValue时,则:

累加器将在第一次迭代时包含第一个数组元素 累加器将包含后续迭代的累积值 在您的示例中,您可以检查累加器变量并相应地求和:

函数代码点字符串{ 返回字符串 分裂 .reduceAc,next=>typeof acc==string?acc.charCodeAt0:acc+next.charCodeAt0 } console.logcodepointsabc 当您在调用时未指定initialValue时,则:

累加器将在第一次迭代时包含第一个数组元素 累加器将包含后续迭代的累积值 在您的示例中,您可以检查累加器变量并相应地求和:

函数代码点字符串{ 返回字符串 分裂 .reduceAc,next=>typeof acc==string?acc.charCodeAt0:acc+next.charCodeAt0 }
console.logcodepointsabc;。charCodeAt返回一个数字,因此第二次通过回调arr将是一个数字而不是字符串..charCodeAt返回一个数字,因此第二次通过回调arr将是一个数字而不是字符串。您的排列解决方案似乎不正确。对于每个代理项对,添加第一个元素并忽略第二个元素。@georg无法理解您的意思。但我已经读到我们应该使用。。。如果是那样的话。”您的字符串是\ud83d\udc0e\ud83d\udc71\u2764,结果是120798,即0xd83d+0xd83d+0x2764@georg我明白了,我错了。这意味着拆分工作正常吗?@georg Ok,我删除了它的多余部分,因为它是
这是不对的。感谢您通知您,您的spread解决方案似乎不正确。对于每个代理项对,添加第一个元素并忽略第二个元素。@georg无法理解您的意思。但我已经读到我们应该使用。。。如果是那样的话。”您的字符串是\ud83d\udc0e\ud83d\udc71\u2764,结果是120798,即0xd83d+0xd83d+0x2764@georg我明白了,我错了。所以这意味着拆分工作正常吗?@georg Ok,我删除了它的多余部分,因为它是错误的。谢谢通知