如何将sql返回转换为自定义对象



在我的代码中,我对存储参数的SQL表进行SELECT,并希望以这种方式输出OBJECT:

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

SQL返回:

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

如果你需要更多信息,不要犹豫。我希望你能帮助我。

提前谢谢。

您可以尝试对数组进行reduce,该数组将为每个数组元素的结果对象添加一个新字段:smth,如以下

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}), {})

您可以将每个对象.map()转换为当前对象的一个变体,其中setting值是新对象的键,value属性的值就是新对象的值。您还可以使用JSON.parse(value)来确保其字符串版本被解析为其基元值(请参见第二个示例(。然后,您可以使用带有spread语法的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]: 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);

正如@Andreas:所指出的,以上内容可以写得更优雅

const arr = [ { setting: 'inscription_max', value: '0' }, { setting: 'inscription_open', value: 'false' }, { setting: 'liste_attente_max', value: '0' } ];
const res = Object.fromEntries(arr.map(Object.values)); // credit to: @Andreas
console.log(res);

最新更新