javascript - 从对象 javascript es6 中获取值
问题描述
let parameters = {
"lifespanCount": 3,
"parameters": {
"fields": {
"date.original": {
"stringValue": "tomorrow",
"kind": "stringValue"
},
"duration.original": {
"stringValue": "3 days",
"kind": "stringValue"
},
"date": {
"structValue": {
"fields": {
"sys.date.recent.original": {
"stringValue": "tomorrow",
"kind": "stringValue"
},
"sys.date.original": {
"stringValue": "tomorrow",
"kind": "stringValue"
},
"sys.date": {
"stringValue": "2018-12-11T12:00:00-05:00",
"kind": "stringValue"
},
"sys.date.recent": {
"stringValue": "2018-12-11T12:00:00-05:00",
"kind": "stringValue"
},
"sys.date.partial": {
"stringValue": "2018-12-11T12:00:00-05:00",
"kind": "stringValue"
},
"sys.date.partial.original": {
"stringValue": "tomorrow",
"kind": "stringValue"
}
}
},
"kind": "structValue"
},
"yes.original": {
"stringValue": "",
"kind": "stringValue"
},
"duration": {
"structValue": {
"fields": {
"sys.duration.object": {
"structValue": {
"fields": {}
},
"kind": "structValue"
},
"sys.duration": {
"structValue": {
"fields": {
"unit": {
"stringValue": "day",
"kind": "stringValue"
},
"amount": {
"numberValue": 3,
"kind": "numberValue"
}
}
},
"kind": "structValue"
},
"sys.duration.original": {
"stringValue": "3 days",
"kind": "stringValue"
}
}
},
"kind": "structValue"
},
"location.original": {
"stringValue": "china",
"kind": "stringValue"
},
"location": {
"structValue": {
"fields": {
"sys.geo-country.original": {
"stringValue": "china",
"kind": "stringValue"
},
"sys.geo-country.object": {
"structValue": {
"fields": {}
},
"kind": "structValue"
},
"sys.geo-country": {
"stringValue": "China",
"kind": "stringValue"
}
}
},
"kind": "structValue"
}
}
}
}
从上面的对象中获取值的最佳方法是什么,
let date = parameters.fields['date'].structValue.fields['sys.date'].stringValue;
let country = parameters.fields['location'].structValue.fields['sys.geo-country'].stringValue
什么可以是一个常见的功能,所以如果我尝试过传递对象和密钥,任何人都可以直接访问值object.values()
,object.keys()
也阅读过 MDN 文档,但对此没有更多了解。我的目标是当我通过对象传递任何键时从对象中获取值。
解决方案
Based purely on your two examples, the easiest way seems to be:
function getString(paramField, structField) {
if (parameters.fields[paramField] && parameters.fields[paramField].structValue.fields[structField]) {
return parameters.fields[paramField].structValue.fields[structField].stringValue;
}
return '';
}
Maybe some additional checks are in order, depending on the likelihood of other variance to the structure.
Then the calling code can just be:
let date = getString('date', 'sys.date');
推荐阅读
- sql - 如何在 SQL 中不使用 DISTINCT 删除重复值?
- google-calendar-api - 谷歌日历 webhook 测试
- java - 从在 Azure Active Directory 中完成身份验证的主体访问电子邮件 ID
- r - 在 Sparklyr 中使用 ml_fpgrowth 选择支持和置信度值
- shell - Shell脚本是数值控制
- authentication - 将外部登录令牌从 Identity Server 流向客户端应用程序
- node.js - “SecurityError: 无法构造 'WebSocket': 可能无法从通过 HTTPS 加载的页面启动不安全的 WebSocket 连接。”
- firebase - 在哪里以及如何正确使用 Firebase 中的 enablePersistence() 方法以离线使用 Web 应用程序?
- java - 用于特定任务的单独文件中用于 Spark 的额外记录器
- ios - 使用未声明的标识符“self”。当我尝试在函数中使用 [self presentViewController]