替换switch语句?

问题描述 投票:4回答:2

有没有办法替换对象的这个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中的每个函数。

  1. 我需要没有商店的get2(),因为它只是上层范围内的一个函数。
  2. 想象5作为对象5:{value1:something,value2:something}
javascript
2个回答
1
投票

您可以将函数调用存储在对象中,并在需要时调用它们。对于未知密钥,将返回默认函数。

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)());

7
投票

原始语法中的语法错误,只需在查找表中有函数,然后调用它们:

const keyMap = {
  1: Store.get1,
  2: get2,
  3: get3,
  4: get4,
  5: get5,
};

Object.keys(data).forEach(key => {
  return keyMap[key]();
});
© www.soinside.com 2019 - 2024. All rights reserved.