在带有 Javascript 的对象的 forEach 循环中进行切换是不好的做法吗?

Is it bad practice to have a switch within forEach loop of objects with Javascript?

我需要更改数组中两个对象的属性。所以我这样做了

var tabs = [
{name: 'A', visible: false},
{name: 'B', visible: true},
{name: 'C', visible: true}}
];

var changeTabsVisibility = () {
  if(validation()){
    tabs.forEach(tab => {
       switch(tab.name) {
       case 'A':
            tab.visible = true;
            break;
       case 'B':
            tab.visible = false;
            break;
       default:
            break;
       }
    });
  }
}

它按照预期的方式工作,但这是一个很好的做法还是最有效、最全面的方法?

我认为更清晰、更简洁、更不容易出错的版本是制作一个对象,将选项卡名称映射到它们的可见性。

const visibilityByTab = {
  A: true,
  B: false
}
tabs.forEach(tab => {
  const newV = visibilityByTab[tab.name];
  if (newV !== undefined) tab.visible = newV;
});

这更容易扩展到更多选项卡名称,并且不会在您忘记 break.

时引入错误。

我认为 switch 声明在这种情况下并不有效。

它只是将名称转换为可见性,不是吗?

您的目标是将名称转换为可见性,因此只需要一个将名称转换为可见性的映射

这是我想的例子。

var tabs = [
    {name: 'A', visible: false},
    {name: 'B', visible: true},
    {name: 'C', visible: true}}
];

const NAME_TO_VISIBLE = {
    'A': true,
    'B': false,
    'C': true,
    ...
};

var changeTabsVisibility = () {
    if(validation()){
        tabs.forEach(tab => {
            tab.visible = NAME_TO_VISIBLE[tab.name] || false;
        });
    }
}