如何将 sql return 转换为自定义对象?

How to convert a sql return to a custom Object?

在我的代码中,我在存储参数的 SQL table 上创建了一个 SELECT,我想以这种方式输出一个对象:

{
  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' } 
]

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

提前致谢。

您可以尝试 reduce 一个数组,它会为每个数组元素的结果对象添加一个新字段:smth like this

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[=44的值=] 是新对象的值。您还可以使用 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]: 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);