Как сопоставить объект, используя строковое имя для ссылки на этот объект? - PullRequest
2 голосов
/ 29 мая 2020

Я пытаюсь уменьшить жестко запрограммированные значения в моем коде. В настоящее время настройка выглядит следующим образом ниже - у меня есть новый объект под названием Tables, и я пробовал следующее, например:

//FROM THE DATA FILE
export const Tables = [
 {name: 'Apple'  , TableID: 'AppleTable'},
 {name: 'Banana' , TableID: 'BananaTable'}
]

export const AppleTable = [
 {name: 'test', type: 'fruit' },
 {name: 'test2', type: 'fruit' },
 {name: 'test3', type: 'fruit' }
]

export const BananaTable = [
 {name: 'test', type: 'fruit' },
 {name: 'test2', type: 'fruit' },
 {name: 'test3', type: 'fruit' }
]

//IN A DIFFERENT FILE
import {Tables} from './Data'

var result = [];
var all = [];

var TableName = '';

for (var i = 0 ; i < Tables.length ; i++){
    if (category === Tables[i].name){
       TableName = Tables[i].TablesID //THIS IS THE NAME OF THE TABLE I WANT
       result = [TableName].map(value) //CARRIED OUT MAPPING USING THAT TABLE 
       all = Objects.values([TableName]) //GET ALL THE VALUES BASED ON THAT TABLE NAME 
   }
} 

Я знаю, что это неверно - Как мне получить его, чтобы он отображал данные из этих таблиц, а не для сопоставления имени строки.

1 Ответ

1 голос
/ 29 мая 2020

Таким образом, вместо установки строки вы можете просто установить таблицу как ссылку на свойство TableID в основном файле данных, например:

//FROM THE DATA FILE
const AppleTable = [
 {name: 'test', type: 'fruit' },
 {name: 'test2', type: 'fruit' },
 {name: 'test3', type: 'fruit' }
]

const BananaTable = [
 {name: 'test', type: 'fruit' },
 {name: 'test2', type: 'fruit' },
 {name: 'test3', type: 'fruit' }
]

export const Tables = [
 {name: 'Apple'  , TableID: AppleTable},
 {name: 'Banana' , TableID: BananaTable}
]

А затем в другом файле вы можете получить к ним доступ например:

if (category === Tables[i].name) {
  TableName = Tables[i].TablesID 
  result = TableName.map(/* your mapping logic here */) 
  all = Object.values(TableName)
}
...