1

在我的代码中,我在存储参数的 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' } 
]

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

先感谢您。

4

2 回答 2

1

您可以尝试减少一个数组,该数组将为每个数组元素的结果对象添加一个新字段: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}), {})
于 2020-03-30T00:42:44.283 回答
0

您可以将.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]: 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);

于 2020-03-30T00:44:34.307 回答