假设我有一个这样的 JSON 对象:
var a = {
"b" : {
"c" : 1
}
}
当我知道字符串 "bc" 时,有没有一种快速的方法来获取 c ?
我想我可以将字符串按点拆分,然后从中向下钻取到 c,但我希望有一种快速的方法可以一次性做到这一点。
就像我希望的那样,var c = a["b.c"]
但这不起作用
假设我有一个这样的 JSON 对象:
var a = {
"b" : {
"c" : 1
}
}
当我知道字符串 "bc" 时,有没有一种快速的方法来获取 c ?
我想我可以将字符串按点拆分,然后从中向下钻取到 c,但我希望有一种快速的方法可以一次性做到这一点。
就像我希望的那样,var c = a["b.c"]
但这不起作用
正如您建议使用拆分的那样,这样的事情怎么样:
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
如果路径无效,则应进行一些额外检查。正如我上面的代码,x
如果undefined
路径的最后部分无效(例如“bd”)。如果路径的任何其他部分无效(例如“dc”),则 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;
}
}
var a = {
"b" : {
"c" : 1
}
}
var c = "b.c".split(".").reduce(function(obj, key) {
return obj[key];
}, a);
alert(c)
见减少。该链接还显示了如何为不支持 ES5 的浏览器实现 shim。请注意,此代码已简化,假设键存在于对象中。