Как мы можем более оптимизировать код переключения ниже? - PullRequest
0 голосов
/ 17 января 2019

Ниже код работает нормально. Но я хочу оптимизировать это. Как я могу достичь той же функциональности в меньшей строке. Есть ли шансы улучшить приведенный ниже код. Маленькая помощь будет высоко ценится.

  setDefaultIndex(selectedFit, defaults, array, fab) {
    const defaultValue =  defaults.filter(item => item.fitCode === selectedFit);
    let selectedIndex: number;
    switch (fab) {
      case 'exterior':
        selectedIndex = array.findIndex(fabric => fabric.id === defaultValue[0].exteriorFabricCode);
        break;
     case 'body':
       selectedIndex = array.findIndex(fabric => fabric.id === defaultValue[0].bodyLiningCode);
       break;
     case 'sleeve':
       selectedIndex = array.findIndex(fabric => fabric.id === defaultValue[0].sleeveLiningCode);
       break;
     default:
       selectedIndex = 0;
       break;
    }
    return selectedIndex;
   }

Ответы [ 2 ]

0 голосов
/ 17 января 2019
  1. Создайте объект (или карту), который отображает значение fab для ввода значений по умолчанию (fabToKey).
  2. Создайте функцию (getPredicate), которая принимает значение и возвращает предикат.
  3. В setDefaultIndex получить значение fab из fabToKey. Если ключ ложный, верните 0;
  4. Получите defaultValue, используя Array.find(). Примечание: вам нужно обработать не найденный случай - то есть поиск возвращает null.
  5. Выполнить findIndex() с предикатом, созданным путем вызова getPredicate с defaultValue[key].

Пример (не тестировался):

const fabToKey = { exterior: 'exteriorFabricCode', body: 'bodyLiningCode', sleeve: 'sleeveLiningCode' };

const getPredicate = value => ({ id }) => id === value;

setDefaultIndex(selectedFit, defaults, array, fab) {
  const key = fabToKey[fab];

  if (!key) return 0;

  const defaultValue = defaults.find(item => item.fitCode === selectedFit);

  // do something if defaultValue is null - ie selectedFit wasn't found

  return array.findIndex(getPredicate(defaultValue[key]));
}
0 голосов
/ 17 января 2019

Что-то вроде этого достаточно?:

setDefaultIndex(selectedFit, defaults, array, fab) {
  const defaultValue =  defaults.filter(item => item.fitCode === selectedFit);
  let selectedIndex: number = 0;
  const id = fab => {
    case 'exterior': return defaultValue[0].exteriorFabricCode
    case 'body': return defaultValue[0].bodyLiningCode'
    case 'sleeve': return defaultValue[0].sleeveLiningCode'
    default: false
  }
  return id(fab) ? array.findIndex(f => f.id === id(fab)) : selectedIndex
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...