0

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

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

2 回答 2

1
  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]));
}
于 2019-01-17T16:42:02.667 回答
0

这样的事情就足够了吗?:

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
}
于 2019-01-17T15:58:43.860 回答