下面的代码工作正常。但是我要优化它。我怎样才能用更少的时间实现相同的功能。有没有机会改善下面的代码。小小的帮助将不胜感激。
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;
}
答案 0 :(得分:1)
fab
值映射为默认值(fabToKey
)的对象(或Map)。 getPredicate
)。setDefaultIndex
中,从fab
获取fabToKey
的值。如果密钥为假,则返回0; defaultValue
获取Array.find()
。注意:您需要处理未找到的情况-即find返回null
。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]));
}
答案 1 :(得分: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
}