假设我有一个像这样的JSON对象:
var a = {
"b" : {
"c" : 1
}
}
当我知道字符串“b.c”时,有没有快速获取c的方法?
我想我可以用点分割字符串然后从那里钻取到c但是我希望有一个快速的方法可以一次性完成。
像我希望的那样var c = a["b.c"]
,但那不起作用
答案 0 :(得分:4)
如你所建议的那样使用分割:
var a = {
"b" : {
"c" : 1
}
}
var n = "b.c".split(".");
var x = a;
for(var i = 0; i < n.length; i++){
x = x[n[i]];
}
//x should now equal a.b.c
如果路径无效,则应进行一些额外的检查。正如我的代码所示,如果路径的最后部分无效(例如“b.d”),x
将为undefined
。如果路径的任何其他部分无效(例如“d.c”),那么javascript将会出错。
这是一个修改过的示例,它将在undefined
的第一个实例处结束循环,这将x
保留为undefined
并确保javascript可以继续执行(无错误) !)......
var n = "d.c".split(".");
var x = a;
for (var i = 0; i < n.length; i++) {
x = x[n[i]];
if (typeof(x) == "undefined") {
break;
}
}
答案 1 :(得分:1)
var a = {
"b" : {
"c" : 1
}
}
var c = "b.c".split(".").reduce(function(obj, key) {
return obj[key];
}, a);
alert(c)
见reduce。该链接还显示了如何为不支持ES5的浏览器实现shim。请注意,此代码已简化,假设键存在于对象中。