#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 просто запускается каждый раз.
- мне нужен get2() без хранилища, потому что это просто функция в верхней области видимости.
- представьте 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
asthis
?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)());