如何使用方括号表示法在JavaScript中获取嵌套对象的字符串?

4
我希望你能提供一个JavaScript方法,该方法的参数为字符串,并且可以从嵌套对象中返回一个值,例如:

var obj = {
  place: {
    cuntry: 'Iran',
    city: 'Tehran',
    block: 68,
    info: {
     name :'Saeid',
      age: 22
    }
  }
};

function getValue(st) {
  // st: 'place[info][name]'
  return obj['place']['info']['name'] // or obj.place.info.name
}


参数 st 的数据格式,可以更改吗? - Rajaprabhu Aravindasamy
st的数据格式不能改变 :) - SAlidadi
我可以在 [] 之后插入 " - SAlidadi
2个回答

4
你的使用情况可能有一个解决方案:

function getValue(st, obj) {
    return st.replace(/\[([^\]]+)]/g, '.$1').split('.').reduce(function(o, p) { 
        return o[p];
    }, obj);
}

console.log( getValue('place[info][name]', obj) );  // "Saeid"
console.log( getValue('place.info.age', obj) );     // 22

你好,能否请您看一下 https://dev59.com/6b7pa4cB1Zd3GeqPuj0v 。:( - Samuel

1
你能以"['a']['b']['c']"的形式输入吗?
function getValue(st) {
  // st: "['place']['info']['name']"
  return eval("obj"+st);
}

你可以对任何字符串应用转换并获得结果。 编辑: 不要直接在代码库中使用Eval。它是邪恶的!

“eval”很遗憾永远不会是最佳解决方案。 - VisioN
这是真的,但问题是我见过的最不寻常的一个。 - footy
我以前见过这样的问题,甚至回答过一个:https://dev59.com/GmYr5IYBdhLWcg3wYZSD#13719799。有趣的是,我甚至在工作中的一些项目中使用了那段代码。 - VisioN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接