这是我的代码:
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”)时,我得到以下输出:
["E", "L", "C", "Black"]
我知道,如果要执行此操作,应将[]的初始值设置为减小。但是,我想知道为什么当我不这样做时,我会把这个具体信息弄清楚。如何在数组中将ELC划分为单独的值?这背后的逻辑是什么?
谢谢!
编辑,尝试使用地图功能:
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;
};
是否要这样做,以使地图在碰到STOP时才停止?不知道该用什么代替“什么”。
答案 0 :(得分:3)
您不提供一个空数组作为累加器的起始值。
在第一个循环中,字符串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']);