问题描述
有没有办法替换对象的这个switch语句?
Object.keys(data).forEach(key => {
switch (true) {
case key === '1':
Store.get1();
return;
case key === '2':
get2();
return;
case key === '4':
get4(4);
return;
case key === '5':
get5({value1 = 5.value1, value2 = 5.value2});
return;
default:
break;
}
})
用这样的东西替换它:
Object.keys(data).forEach(key => {
const keyMap = {
1: Store.get1(),
2: get2(),
3: get3(),
4: get4(),
5: get5({value1 = 5.value1, value2 = 5.value2}),
};
return keyMap[key];
但是这样每次都会触发keyMap中的每个函数。
- 我需要没有商店的get2(),因为它只是上层范围内的一个函数。
- 想象5作为对象5:{value1:something,value2:something}
1楼
原始语法中的语法错误,只需在查找表中有函数,然后调用它们:
const keyMap = {
1: Store.get1,
2: get2,
3: get3,
4: get4,
5: get5,
};
Object.keys(data).forEach(key => {
return keyMap[key]();
});
2楼
您可以将函数调用存储在对象中,并在需要时调用它们。 对于未知密钥,将返回默认函数。
var fns = {
1: () => Store.get1(),
2: () => get2(),
4: () => get4(4),
5: () => get5({ value1 = 5.value1, value2 = 5.value2 }),
default: () => {}
};
Object
.keys(data)
.forEach(key => (fns[key] || fns.default)());