我可以在更大程度上重构此代码块。需要一些建议

时间:2019-07-17 15:24:15

标签: javascript node.js

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中,只有键值对是多余的。我只是想减少此处的冗余。

2 个答案:

答案 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)