javascript - 动态属性访问器
问题描述
给定一个点符号的属性访问器,例如。google.maps.places
,我需要评估语句以获取属性值。
var str = 'google.maps.places';
var statement = 'window["' + str.split('.').join('"]["') + '"]';
eval(statement);
当然,它有效,但我从未eval
在生产中使用过,也永远不会想要,所以只是想知道是否有更好的方法?也因为这是一个简单的示例,但该函数可以接受任何级别的访问器,只是google
或google.maps
甚至google.maps.places.autocomplete
.
解决方案
您可以使用split()
和reduce()
let obj = {
google:{
maps:{
places:["Place 1","place 2"]
}
}
}
function findItem(obj,path){
path = path.split('.');
return path.reduce((ac,a) => (ac.hasOwnProperty(a) ? ac[a] : {}),obj);
}
console.log(findItem(obj,'google.maps.places'))
推荐阅读
- node.js - typeorm 在“ORDER”处或附近产生语法错误
- python-3.x - 从一个文本文件中提取行并使用正则表达式将它们放入两个不同的文本文件中?#Python
- authentication - 如何使用 JWT 授权标头(不带 cookie)将 OAuth2 登录添加到应用程序?
- javascript - 使用已解决的承诺异步等待更新对象数组
- typescript - 使用 rollup、postcss 和 tailwind 框架打包使用 lit-element 制作的 web 组件
- sharepoint - PowerApps 链接到外部网页
- python - 带有 ThreadPoolExecutor 和请求的 Python Segmentation Fault 11
- c# - C#程序在编译时创建一个dll文件
- javascript - 反应路由器 - 指定路由接口
- java - 如何在spring中重用socket连接来发送ISO8583消息