booolean? function1(item,key):function2(item,key)
基于布尔值它会进入其中一个函数,因此可以在更大程度上进行重构。需要建议。谢谢
function1(item, key) {
getInstance().updateItem(item, {
flag1: "Fail",
flag2: "Fail",
flag3: "Fail",
flag4: "Fail",
flag5: "Fail",
[key]: cipFailedFlags
})
}
function2(item, key) {
getInstance().updateItem(item, {
[key]: cipFailedFlags
})
}
我们可以消除两个功能的使用并使它通用吗?在function1中,只有键值对是多余的。我只是想减少此处的冗余。
答案 0 :(得分:1)
您可以将布尔值标志作为参数传递给函数,以在内部构建正确的对象,如下所示:
function oneFn(item, key, flag) {
getInstance().updateItem(item, Object.assign(
{ [key]: cipFailedFlags },
flag ? { flag1: "Fail", flag2: "Fail", /* etc... */ } : {}
));
}
如果您认为三元运算符使可读性降低,则可以改为使用变量和if
语句来更改函数:
function oneFn(item, key, flag) {
let config = { [key]: cipFailedFlags };
if (flag) {
config = { ...config, flag1: "Fail", flag2: "Fail", /* etc... */ };
}
getInstance().updateItem(item, config);
}
答案 1 :(得分:1)
您真的需要该功能吗?只需使用传播运算符,您就可以在其中添加对象中不同的项目。
const params = myBool ?
{ a : 1, b: 2 } : {}
getInstance().updateItem(item, {
...params,
[key]: cipFailedFlags
})
示例显示它正在运行
/* just a mock */
const getInstance = () => ({
updateItem: (a, b, c) => console.log(b)
})
function example(myBool) {
const item = "1"
const key = "x"
const cipFailedFlags = "y"
const params = myBool ? {
a: 1,
b: 2
} : {}
getInstance().updateItem(item, {
...params,
[key]: cipFailedFlags
})
}
example(true)
example(false)