从动态字符串名称解构对象

Destructuring an object from a dynamic string name

我得到了这个 config.json 文件:

"signs_table": {
  "id_field": "dummy_id_field_name",
  "prop" : "dummy_prop_name"
   ...
}

此文件包含用于存储在数据库中的大量 table 的大量配置。每个 table 都有不同的字段名称,但我的代码配置对于每个 table 都是相同的(一个 Id 字段名称,不同的 属性 字段,当然字段名称从 table 到 table).

所以,在我的代码中,我得到了一个数据对象,我希望能够将它分解为动态命名的属性(来自配置),就像这样:

const { dummy_id_field_name, dummy_prop_name} = this.props.data

但这是硬编码方式。我想根据配置文件加载命名属性。 像 :

const IdField = config.get("signs_table").id_field // this will retrieve the actual field name from config.json I want to be able to pass it through the destructuring operation
const PropField = config.get("signs_table").prop
const { IdField , PropField } = data

这里的 config.get("signs_table") 行来自管理我的 config.json 文件的 class 方法...它基本上检索 属性.

到目前为止,我发现了这个有用的方法:

但这对我没有帮助,因为我需要先从配置文件中检索字段名称...

有什么想法吗?

您无法避免首先从配置文件中获取字段名称:

const { id_field: IdField, pro: PropField } = config.get("signs_table"); // this will retrieve the actual field names from config.json 

然后,之后您可以在解构实际数据时使用这些作为计算的 属性 名称:

const { [IdField]: idValue , [PropField]: propValue } = this.props.data;
console.log(idValue, propValue);

您可以 de-structure 任意 属性 名称,如下所示,但问题是您为什么要强迫自己使用您不熟悉的语法。您应该坚持使用可读且直接的方法,而不是一些花哨的复杂方法。

const idField = config.get("signs_table").id_field; // this will retrieve the actual field name from config.json I want to be able to pass it through the destructuring operation
const propField = config.get("signs_table").prop;
const { [idField]: idValue, [propField]: propValue } = data;

完全避免 de-structuring 并直接访问字段会更直接。

const idField = config.get("signs_table").id_field; // this will retrieve the actual field name from config.json I want to be able to pass it through the destructuring operation
const propField = config.get("signs_table").prop;

const idValue = data[idField];
const propValue = data[propField];