【发布时间】:2017-10-18 15:15:32
【问题描述】:
我正在创建一个 API,其中值由服务器通过数据属性传递,因此 JS 可以用来检索信息...我的 JS 进行 AJAX 调用并返回一个 JSON 对象...
{
"data": {
"results": {
"type": [
{
"cars" : {
"brands": {
"ford" : {},
"honda" : {}
}
}
}
]
}
}
}
为了得到品牌,我只是输入
let brand = data.result.type[0].cars.brands.ford
这样我可以获得我需要的结果,但我需要通过加入路径的 2 个部分来动态构建此路径。就像我在问题开头所说的那样,一些信息是通过数据属性传递的,信息是type[0].cars.brands.ford...我需要在我的代码中将它加入到data.result。我目前可以通过使用eval() 来获得想要的结果,就像这样
entry.querySelectorAll('[data-brand]').forEach((e) =>
let brand = eval('data.result.' + e.dataset.brand);
)
我知道你们中的许多人会说使用 eval() 不好,我很清楚这一点,但我找不到更好的方法来实现这一点,还有另一个问题,当品牌,假设 nissan 不在 JSON 上,我收到错误 TypeError: Cannot read property 'nissan' of undefined... 可以通过在继续代码之前检查属性是否存在来避免这种情况,但我不知道该怎么做涉及eval() 时的测试。
所以...基本上,我需要的是一种更好的动态构建属性路径的方法,可以测试该属性是否存在...
提前谢谢...
【问题讨论】:
-
你可以使用 data.result['property_name']
-
感谢您的回答,但我已经尝试过了,但没有成功...
-
究竟是什么不起作用?
-
@Jonasw 启发我
-
Jonas w接受的答案完美运行...
标签: javascript json object ecmascript-6 eval