亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能在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 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號