如何显示嵌套在数组中的对象的匹配描述?

问题描述 投票:0回答:2

我有一个函数,其作用是显示嵌套在数组中的特定对象的特定描述。这个想法是,一旦函数(findSettings())接收到对象中的特定数组(systemSettings)和某些键(tab12),它应该通过switch语句运行并提供匹配的描述。

换句话说,如果函数的参数为​​'tab12',则它应返回描述'tab12的描述'。

我尝试使用find方法查找匹配的对象,并且效果很好,尽管如果我尝试运行switch语句,它会返回错误:'Obejct可能未定义'。

const systemSettings = [
  {key: 'tab1', value: 'Main Tab'}, 
  {key: 'tab12', value: 'Tab 12'}, 
  {key: 'tab13', value: 'Tab 13'}, 
  {key: 'tab4', value: 'Tab 4'}
]

type sampObj = {
  key: string;
  value: string;
}

let info: string = '';

function findSetting(arr: sampObj[], settingKey: string) {

  const selectedObjs = arr.find(obj => obj.key === settingKey);

  switch(selectedObjs.key) {
    case 'tab1':
      info += 'Description for tab1';
      break;
    case 'tab12':
      info += 'Description for tab12';
      break;
    case 'tab13':
      info += 'Description for tab13';
      break;
    case 'tab4':
      info += 'Description for tab4';
      break;
    default: 
      info += 'No description available'
  }

}

findSetting(systemSettings, 'tab12')```

Any assistance would be highly appreciated.
Thanks.
javascript arrays typescript object switch-statement
2个回答
0
投票

如果具有指定键的对象不在数组中,则[const selectedObjs = arr.find(obj => obj.key === settingKey);可能返回undefined

您可以在执行switch语句之前检查对象是否未定义:

if(selectedObjs) {
   switch(selectedObjs.key) {
       case 'tab1':
          info += 'Description for tab1';
          break;
        case 'tab12':
          info += 'Description for tab12';
          break;
        case 'tab13':
          info += 'Description for tab13';
          break;
        case 'tab4':
          info += 'Description for tab4';
          break;
        default: 
          info += 'No description available'
  }
}
else {
   // Handle invalid settingKey case
}

0
投票

我认为更简单的解决方案是使用类似Map的名称来存储针对键的描述。此外,TypeScript中还有方便的实用程序类型,称为Record,以确保类型安全。然后,您根本不必在findSetting函数

中提供数组。
  systemSettingsDescriptions: Record<string, string> = {
    tab1: "Description for tab1",
    tab2: "Description for tab2",
    tab3: "Description for tab3"
  };

  systemSettings: sampObj [] = [
    { key: "tab1", value: "Main Tab" },
    { key: "tab12", value: "Tab 12" },
    { key: "tab13", value: "Tab 13" },
    { key: "tab4", value: "Tab 4" }
  ];

  function findSetting(settingKey: string): string {
    this.systemSettingsDescriptions[settingKey] || "No description available";
  }
© www.soinside.com 2019 - 2024. All rights reserved.