为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Helenr 2021-04-11 09:24:51
我有以下代码,用于尝试获取一个单词的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方法呢?
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

您使用的方法不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"));


查看完整回答
反对 回复 2021-04-29
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

当您不指定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"));


查看完整回答
反对 回复 2021-04-29
  • 3 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信