[英]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.