从具有键和索引作为字符串的对象中检索值:'array [0] .key'

时间:2018-10-14 17:29:03

标签: javascript

我正在使用一些特定的库来处理javascript中的表单。在这个库中,如果我有:

{
    "id": 1,
    "order": 0,
    "title": "A title",
},

我可以做到:

const field = 'order';
form.getState().values[field]

然后我将获得标题值。

现在让我们说我有这个数据:

{
    "id": 1,
    "order": 0,
    "title": "A title",
    "Tags": [
        {
            "id": 1,
            "name": "Tag one",
        },
        {
            "id": 2,
            "name": "Tag two",
        }
    ]
},

我也可以访问一个字符串,其中包含标签的字段名称,数组的索引以及要检索的字段。但是我把所有这些都放在一个字符串中:

Tags[0].name

如果我这样做:

const field = 'Tags[0].name';
form.getState().values[field]

它将返回undefined,因为它将尝试在对象中找到键Tags[0].name。因此:如何将name作为字符串,从Tags数组中的特定索引中检索Tags[0].name属性?

1 个答案:

答案 0 :(得分:1)

使用eval有点讨厌,但快速而可行的方法是

const field = 'Tags[0].name';
let stateValues = form.getState().values;
let tagName = eval(`stateValues.${ field }`)

其他方法可能是使用regexp拆分和解析字段路径,然后逐个遍历对象属性。