Как преобразовать sql возврат в пользовательский объект? - PullRequest
1 голос
/ 30 марта 2020

В моем коде я делаю SELECT для таблицы SQL, где хранятся параметры, и я хотел бы вывести OBJECT следующим образом:

{
  inscription_max: 0,
  inscription_open: false,
  liste_attente_max: 0
}

SQL Return:

[
  RowDataPacket { setting: 'inscription_max', value: '0' },
  RowDataPacket { setting: 'inscription_open', value: 'false' },
  RowDataPacket { setting: 'liste_attente_max', value: '0' } 
]

Если вам нужна дополнительная информация, не стесняйтесь. Я надеюсь, что вы можете мне помочь.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

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

let data = [
  { setting: 'inscription_max', value: '0' },
  { setting: 'inscription_open', value: 'false' },
  { setting: 'liste_attente_max', value: '0' } 
]

data.reduce((acc, rec) => ({...acc, [rec.setting] : rec.value}), {})
0 голосов
/ 30 марта 2020

Вы можете .map() каждый объект к варианту текущего объекта, где значение setting является ключом нового объекта, а значение свойства value является значением нового объекта. Вы также можете использовать JSON.parse(value), чтобы убедиться, что его строковая версия проанализирована с его примитивным значением. Затем вы можете использовать Object.assign() с синтаксисом распространения для создания объекта из вашего нового массива объектов:

const arr = [
  { setting: 'inscription_max', value: '0' },
  { setting: 'inscription_open', value: 'false' },
  { setting: 'liste_attente_max', value: '0' } 
];

const res = Object.assign({}, ...arr.map(({setting, value}) => ({[setting]: JSON.parse(value)})));
console.log(res);

Если вы можете поддерживать Object.fromEntries(), тот же результат может быть достигнут с немного меньшим количеством кода:

const arr = [
  { setting: 'inscription_max', value: '0' },
  { setting: 'inscription_open', value: 'false' },
  { setting: 'liste_attente_max', value: '0' } 
];

const res = Object.fromEntries(arr.map(({setting, value}) => [setting, JSON.parse(value)]));
console.log(res);
...