我有这个JSON
var myJSON = {
"a": {
"b": {
"c": {
"Foo": "Bar"
}
}
}
}
我也有这个数组:
var path = ["a", "b", "c", "foo"]
如何使用路径获取Bar
?
答案 0 :(得分:15)
结帐Array.prototype.reduce()
。这将从myJSON
开始,向下浏览path
中定义的每个嵌套属性名称。
var myJSON = {
"a": {
"b": {
"c": {
"Foo": "Bar"
}
}
}
};
var path = ["a", "b", "c", "Foo"]; // capitalized Foo for you...
var val = path.reduce((o, n) => o[n], myJSON);
console.log("val: %o", val);

答案 1 :(得分:6)
有一个存储对象值的变量,然后遍历path
访问该变量中的下一个属性,直到下一个属性未定义,此时变量保存end属性。
var val = myJSON;
while (path.length) {
val = val[path.shift()];
}
console.log(val);
答案 2 :(得分:4)
function access(json, path, i) {
if (i === path.length)
return json;
return access(json[path[i]], path, i + 1);
}
使用:
access(myJSON, path, 0)
答案 3 :(得分:0)
var myJSON = {
"a": {
"b": {
"c": {
"Foo": "Bar"
}
}
}
}
var path = ["a", "b", "c", "Foo"]
var findViaPath = function (path, object) {
var current = object;
path.forEach(function(e) {
if (current && e in current) {
current = current[e];
} else {
throw new Error("Can not find key " + e)
}
})
return current;
}
findViaPath(path, myJSON);