【问题标题】:Dynamic property accessor [duplicate]动态属性访问器 [重复]
【发布时间】:2019-03-27 11:08:56
【问题描述】:

给定一个点表示法的属性访问器,例如。 google.maps.places,我需要评估语句以获取属性值。

var str = 'google.maps.places';
var statement = 'window["' + str.split('.').join('"]["') + '"]';
eval(statement);

当然,它有效,但我从来没有在生产中使用过eval,也永远不会想要,所以只是想知道是否有更好的方法?也因为这是一个简单的示例,但该函数可以接受任何级别的访问器,只是googlegoogle.maps 甚至google.maps.places.autocomplete

【问题讨论】:

    标签: javascript object accessor


    【解决方案1】:

    您可以使用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'))

    【讨论】:

    • 我想你忘了return最后的声明
    • @Shilly No @Andrey 的意思是如果不从函数返回,他就不会接受 reduce 的回调
    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多