我有一个json对象:
var config =
{
"data1" :
{
"emp1":
{
"phone" : "111",
"address": "xxx"
},
"emp2":
{
"phone" : "111",
"address": "xxx"
}
}
}
在我的函数中,我传递了根对象和我想要的名字的字符串:
function getEmp(config, section)
{
}
config是上面的json对象。 Section是emp1或emp2的字符串。 我希望能够结合使用像这样的功能
var emp1Data = getEmp(config, 'emp1')
返回JSON对象的那部分的最佳方法是什么?
我试过了:
function getEmp(config, section)
{
return JSON.parse(config + '.' + emp);
}
但这失败了。我希望能够在没有循环函数的情况下完成它。
更新1 我的配置对象有一个额外的逗号。我已经更新了
更新2 我现在修复了我的配置对象
答案 0 :(得分:0)
如果你有一个Javascript对象:
var config = {
"emp1":
{
"phone" : "111",
"address": "xxx"
},
"emp2":
{
"phone" : "111",
"address": "xxx"
}
}
然后您可以这样访问它:
(function(config, section) {
return config[section];
})(config, 'emp1');
使用[]
表示法访问config
对象的属性,类似于config.emp1
。
请参阅以下关于[]
属性访问符号的MDN文章:Property Accessors
答案 1 :(得分:0)
您的配置定义不明确。你想要这样的东西:
var config =
{
"emp1":
{
"phone" : "111",
"address": "xxx"
},
"emp2":
{
"phone" : "111",
"address": "xxx"
}
};
然后,为了得到你想要的东西,你做(例如)
var blah = config["emp1"];
console.log( JSON.stringify( blah ) );
答案 2 :(得分:0)
您可以使用for..in
循环遍历对象及其子对象的不同属性名称。请参阅此处以获取您想要的示例:
function getEmp(config, section)
{
for(var cur in config){
if(cur == section){
return config[cur];
}else if(typeof config[cur] == 'object'){
var result = getEmp(config[cur], section);
if(typeof result != 'undefined'){
return result;
}
}
}
}
答案 3 :(得分:0)
function deepGet(root, path) {
let output = root;
for (const e of path) output = output[e];
return output;
}
示例:
function deepGet(root, path) {
let output = root;
for (const e of path) output = output[e];
return output;
}
const a = [];
a.b = [];
a.b.c = 'd';
console.log(deepGet(a, ['b', 'c']) === a.b.c);
console.log(deepGet(a, ['b']) === a.b);
console.log(deepGet(a, []) === a);
答案 4 :(得分:-1)
您可以使用eval()
来执行此操作
function getEmp(config, section)
{
return eval( "(" + config + "." + section + ")" )
}
但你必须确保config
是一个字符串,而不是一个对象。
含义:您必须像这样调用该函数:
var sec = getEmp('config','emp2');