Как вывести соответствующее описание объекта, вложенного в массив? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть функция, цель которой - показать описание c определенного объекта, который вложен в массив. Идея состоит в том, что как только функция ( findSettings () ) получает определенный массив ( systemSettings ) и некоторый ключ ( tab12 ), который находится в объектах, он должен пройти через оператор switch и предоставить соответствующее описание.

Другими словами, если аргумент функции равен 'tab12', он должен вернуть описание 'Description for 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.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Я думаю, что более простым решением было бы использовать что-то вроде Карта для хранения ваших описаний по ключам. Кроме того, в TypeScript есть удобный Utility Type, называемый Record для обеспечения безопасности типов. Тогда вам просто не нужно указывать свой массив в findSetting function

  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";
  }
0 голосов
/ 19 февраля 2020

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
}
...