我正在尝试向RegExp返回一组参数。$(又称JS的f-string(。
const schema = require('../schema.json').Flights;
class flightRepo{
keys = Object.keys(schema);
create(db) {
return client.query(
"INSERT INTO flights ($1, $2, $3, $4, $5, $6) VALUES ($7, $8, $9, $10, $11, $12)",
keys[0], keys[1], keys[2], keys[3], keys[4], keys[5],
db.schema.keys[0], db.schema.keys[1], db.schema.keys[2], db.schema.keys[3], db.schema.keys[4], db.schema.keys[5]
);
}
}
关于
client.query:Deno的PostgreSQL库中的客户端对象
db:传递列表[args[0-5]用于每个键]以创建新的db条目
create:函数从PostgreSQL 返回查询状态
JSON结构
{
"Flights" : {
"FlightNo": "INT PRIMARY KEY",
"Airlines": "STRING 50",
"Time": "DATETIME",
"OnTime": "BOOLEAN",
"Dep": "STRING 4",
"Arr": "STRING 4"
}
}
我想做的是消除手动指定n个参数(键[0-5](和($1-12(的需要,而是创建一个表达式来为任何x项键列表执行此操作。
(如果知道一种方法可以消除在Ln.1中输入"Flights"JSON密钥的需要,那就太好了(
我不得不做一些假设,但您可以通过基于keys
数组创建$#
令牌(可能是在模板文字中(并使用扩展符号来扩展keys
和db.schema.keys
数组,使代码改变键的数量;参见评论:
const schema = require('../schema.json').Flights;
class flightRepo {
// ^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− the convention is to capitalize this F
keys = Object.keys(schema);
create(db) {
return client.query(
`INSERT INTO flights (${keys.map((_, i) => `${i + 1}`)}) VALUES (${keys.map((_, i) => `${i + 1 + keys.length}`)})`,
...keys,
...db.schema.keys // Assumes `db.schema.keys` is known to have the same length as `keys`
);
}
}
也很高兴知道一种方法来消除输入";航班";Ln.1 中的JSON密钥
您需要说明您想要对象的哪个部分。如果你想的话,你可以通过使用带重命名的析构函数来重新定位它:
const {Flights: schema} = require('../schema.json');
但你所掌握的可能更清楚。或者,当然,不要更改名称:
const {Flights} = require('../schema.json');
并且使用CCD_ 5而不是CCD_。但是,如果它指的不是构造函数,那么将其大写可能会令人困惑。
现在您已经显示了JSON,我们可以看到(至少在本例中(Flights
是对象的唯一属性。如果你可以依赖它,你可以这样做:
const data = require("./schema.json");
const schema = data[Object.keys(data)[0]];