dobbey
dobbey

Reputation: 105

replacement for switch statements?

Any way to replace this switch statement for object?

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

to replace it with something like this:

       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];

but this way every function in keyMap just gets triggered every time.

  1. i need get2() without store, because its just a function in the upper scope.
  2. imagine 5 as an object 5: { value1: something, value2: something}

Upvotes: 4

Views: 76

Answers (2)

Nina Scholz
Nina Scholz

Reputation: 386680

You could store the function calls in the object and call them if needed. For not known keys, a default function is returned.

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

Upvotes: 1

AKX
AKX

Reputation: 169194

Syntax errors in the original aside, just have the functions in the lookup table, then call them:

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

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

Upvotes: 7

Related Questions