0

假设我有一个这样的 JSON 对象:

var a = {
  "b" : {
    "c" : 1
  }
}

当我知道字符串 "bc" 时,有没有一种快速的方法来获取 c ?

我想我可以将字符串按点拆分,然后从中向下钻取到 c,但我希望有一种快速的方法可以一次性做到这一点。

就像我希望的那样,var c = a["b.c"]但这不起作用

4

2 回答 2

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

这是一个工作示例


如果路径无效,则应进行一些额外检查。正如我上面的代码,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;
    }
}

这是一个实际的例子

于 2013-02-15T16:12:06.593 回答
1
var a = {
  "b" : {
    "c" : 1
  }
}

var c = "b.c".split(".").reduce(function(obj, key) {
    return obj[key];
}, a);

alert(c)

减少。该链接还显示了如何为不支持 ES5 的浏览器实现 shim。请注意,此代码已简化,假设键存在于对象中。

于 2013-02-15T16:12:36.893 回答