簡體   English   中英

我不明白為什么我在 a.reduce javascript 方法之后收到這個 output

[英]I can't understand why I'm receiving this output after a .reduce javascript method

這是我的代碼:

nicknames = {'RAM' : 'Black', 'ELC': 'Mamba', 'FAD' : 'Samba', 'NOP' : 'STOP'}

const nickGet = (initials) => {

 return initials.match(/.{1,3}/g).reduce((arr, trio) => {
    if (!nicknames[trio]) throw new Error('Invalid trio')
    return [...arr, nicknames[trio]]

})
}

當我運行 nickGet("ELCRAM") 時,我得到以下 output:

["E", "L", "C", "Black"]

我知道如果我想讓這個工作,我應該設置一個 [] 的初始值來減少。 但是,我想知道為什么當我不這樣做時,我會得到這個具體的信息。 ELC 如何在我的數組中划分為單獨的值? 這背后的邏輯是什么?

謝謝!

編輯,嘗試用 map function 來做:

var nicknames = { RAM: 'Black', ELC: 'Mamba', FAD: 'Samba', NOP: 'STOP' };

const nickGet = (initials) => {
  var nick = initials.match(/.../g).map((trio) => {
    if (!nicknames[trio]) throw new Error('Invalid trio')
    return nicknames[trio]

  }, []);

nick.length = nick.findIndex(element => element == "STOP");
return nick;
};

無論如何要這樣做,以便地圖在停止時停止? 如果有的話,不確定用什么來代替“無”。

您不提供空數組作為累加器的起始值。

在第一個循環中,字符串ELC被展開為單個字符,因為這是arr的值。 作為trio ,您將獲得RAM ,並且此值將轉換為'Black'

 var nicknames = { RAM: 'Black', ELC: 'Mamba', FAD: 'Samba', NOP: 'STOP' }; const nickGet = (initials) => { return initials.match(/.../g).reduce((arr, trio) => { if (.nicknames[trio]) throw new Error('Invalid trio') return [..,arr; nicknames[trio]], }; []); }. console;log(nickGet('ELCRAM')). console.log([..;'ELC']);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM