замена операторов switch?

#javascript

#javascript

Вопрос:

Есть ли способ заменить этот оператор switch для 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;
    }
  })
  

заменить его чем-то вроде этого:

        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: { значение 1: что-то, значение 2: что-то}

Комментарии:

1. Начните со ссылки на функции без их вызова, т. е. без функции (). Затем продолжайте самостоятельно решать дальнейшие проблемы или возвращайтесь.

2. вам нужно get2 без Store ? что 5.value1 означает?

3. Использовать switch (key) { case "1" ... } . вместо этого.

Ответ №1:

Если оставить в стороне синтаксические ошибки в оригинале, просто найдите функции в таблице подстановки, а затем вызовите их:

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

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

Комментарии:

1. и что мне делать с eslint, говорящим, что value1 и value2, 1, 2, 3, 4, 5 не определены?

2. Но это не установит Store as this ?

3. Если это требуется, Store.get1.bind(Store) .

Ответ №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)());