替换switch语句?

时间:2019-03-04 12:31:54

标签: javascript

有什么方法可以代替对象的该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:某物,value2:某物}

2 个答案:

答案 0 :(得分:7)

除了原始语法错误外,只需在查找表中添加函数,然后调用它们即可:

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

Object.keys(data).forEach(key => {
  return keyMap[key]();
});

答案 1 :(得分: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)());