【问题标题】:How to avoid repetition of code in javascript?如何避免在javascript中重复代码?
【发布时间】:2020-12-06 03:02:54
【问题描述】:

我正在编写一个节点程序,我在其中输入一个 id(必需)和一个属性(可选),并且该函数遍历对象数组,直到找到具有相同输入 id 和/或属性的对象。

到目前为止,我有这个并且它有效:

       if(id && query === undefined){
       let searchById = employeesObj.filter(employee => {
           return employee.id == id
       }) 
       if(Object.entries(searchById).length === 0){
           console.log('This employee doesn\'t exist')
           return
    }
    console.log('Employee information: \n', searchById)
    } 

    if(query){
        let searchById = employeesObj.filter(employee => {
            return employee.id == id
        })
        if(Object.entries(searchById).length === 0){
            console.log('This employee doesn\'t exist')
            return}
        let obj = searchById[0]
        if(obj.hasOwnProperty(query)){
            console.log(obj[query])
        }else{
        console.log('input query doesn\'t exist')
    }
    } 

})

可以看到,这部分功能是一样的:

let searchById = employeesObj.filter(employee => {
       return employee.id == id
   }) 
   if(Object.entries(searchById).length === 0){
       console.log('This employee doesn\'t exist')
       return
}

当你输入一个id时它会搜索,而当你输入一个查询(属性)时它会搜索。

如何避免代码重复?

【问题讨论】:

  • 您不需要用Object.entries(...) 包裹searchById。这是一个数组,你可以检查if (searchById.length === 0)。但是关于重复,写一个函数,在两个地方都调用它。

标签: javascript node.js arrays performance object


【解决方案1】:

一般来说,如果您必须多次运行代码,则将其放入一个函数中。但是,修复代码重复的更好方法是首先避免重复该事情。您可以在此处执行此操作,方法是在开始时仅进行一次 ID 搜索,并在检查查询时保留 searchById 结果:

let searchById = employeesObj.filter(employee => {
    return employee.id == id
}) 
if(Object.entries(searchById).length === 0){
    console.log('This employee doesn\'t exist')
    return
}


if(query){
    let obj = searchById[0]
    if(obj.hasOwnProperty(query)){
        console.log(obj[query])
    } else {
        console.log('input query doesn\'t exist')
    }
} else {
    console.log('Employee information: \n', searchById)
}

【讨论】: