【问题标题】:How can I write this code more efficiently with DRY concept?如何使用 DRY 概念更有效地编写此代码?
【发布时间】:2020-12-29 18:58:03
【问题描述】:

这是一段用于 HTML 表单的 JavaScript 代码。我想提高效率,不要多次写同一行;这在下面的代码中可行吗?

function resetOptions(location)
{   
    if (location=='country') 
    {   
        removeOptions(selected_address_zone)
        removeOptions(selected_address_region)
        removeOptions(selected_address_city)
        removeOptions(selected_address_area)
    }
    else if (location=='zone')
    {
        removeOptions(selected_address_region)
        removeOptions(selected_address_city)
        removeOptions(selected_address_area)
    }
    else if (location=='region')
    {
        removeOptions(selected_address_city)
        removeOptions(selected_address_area)
    }
    else
    {
        removeOptions(selected_address_area)
    }
    
}

【问题讨论】:

  • 这需要一个查找表,例如{ country: [ selected_address_zone, ... ], zone: [ ... ] },您可以直接跳转到需要删除的列表。
  • 重复并不意味着在所有情况下都出于相同的原因调用行。您应该只干掉出于相同原因调用的行。在您的情况下,如果我将selected_address_area 移动到if .. else 之外,因为它适用于所有情况,那么下次我引入新的else if 时会遇到问题,或者我需要更改要删除的区域选项。
  • "不要重复同一行不止一次" 只是出于好奇,您是说这个吗?或者你的意思是你不想多次写同一行?
  • @TylerH removeOptions(selected_address_area) 已经写了三遍了,我只想写一次

标签: javascript if-statement dry


【解决方案1】:

您可以使用不中断的 switch 语句进行重写。通过这样做,例如,如果该位置是一个国家/地区,它将执行其下面的案例,直到找到中断。

  switch(location): {
    case: 'country': 
        removeOptions(selected_address_zone);
    case 'zone': 
        removeOptions(selected_address_region);
    case 'region':
        removeOptions(selected_address_city);
    default:
        removeOptions(selected_address_area);

  }

【讨论】:

    【解决方案2】:

    您可以为函数顶部的 removeOptions() 函数中传递的参数设置变量。

    然后您可以根据您的函数参数调整参数。

    查看 removeOptions() 函数及其参数会很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      相关资源
      最近更新 更多