【问题标题】:How to return RegExp.$ Parameters from a JSON of Parameters inside a Function() call?如何从 Function() 调用中的参数 JSON 返回 RegExp.$ 参数?
【发布时间】:2020-12-31 23:01:07
【问题描述】:

我正在尝试将一组参数从 JSON 文件返回到 RegExp.$(也称为 JS 的 f 字符串)。

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] for each key] 创建新的数据库条目
create: 函数从 PostgreSQL 中返回查询状态

JSON 结构

{
    "Flights" : {
        "FlightNo": "INT PRIMARY KEY",
        "Airlines": "STRING 50",
        "Time": "DATETIME",
        "OnTime": "BOOLEAN",
        "Dep": "STRING 4",
        "Arr": "STRING 4"
    }
}

我想要做的是消除手动指定 n args (keys[0-5]) 和 ($1-12) 的需要,而是创建一个表达式来为任何 x-item 键列表执行此操作。

(如果知道一种方法可以消除在 Ln.1 中输入“Flights”JSON 密钥的需要,那就太好了)

【问题讨论】:

  • 什么是client.querydb.schema 是什么?是create 方法吗?它周围没有类或对象,但没有 function 关键字,也不是箭头函数。
  • @T.J.Crowder 更新

标签: javascript json regex string


【解决方案1】:

我必须做出一些假设,但您可以通过基于 keys 数组(可能在模板文字中)创建 $# 标记并使用扩展符号来使代码改变键的数量展开 keysdb.schema.keys 数组;见 cmets:

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 中输入“Flights”JSON 密钥的需要,那就太好了

你需要说出你想要的对象的哪一部分。如果需要,可以通过重命名解构来重新定位它:

const {Flights: schema} = require('../schema.json');

...但是您所拥有的可能更清楚。或者当然,不要更改名称:

const {Flights} = require('../schema.json');

...并使用Flights 而不是schema。但如果它指的是不是构造函数的东西,那么将其大写可能会令人困惑。

现在您已经展示了 JSON,我们可以看到(至少在本示例中)Flights 是对象的唯一属性。如果你可以依赖它,你可以这样做:

const data = require("./schema.json");
const schema = data[Object.keys(data)[0]];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多