首页 > 解决方案 > 我们如何在 switch 代码下面进行更多优化?

问题描述

下面的代码工作正常。但我想优化它。我怎样才能在更少的行中实现相同的功能。有没有机会改进下面的代码。一点帮助将不胜感激。

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

标签: typescriptecmascript-6

解决方案


  1. 创建一个对象(或 Map),将值映射fab到默认值 ( fabToKey) 中的键。
  2. 创建一个getPredicate接受值并返回谓词的函数 ( )。
  3. setDefaultIndex获取fabfrom的值fabToKey。如果 key 是假的,则返回 0;
  4. 使用. defaultValue_ Array.find()注意:您需要处理 not found 的情况 - 即 find returns null
  5. 使用通过调用创建的findIndex()谓词运行.getPredicatedefaultValue[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]));
}

推荐阅读