我正在尝试获取 AngularJS 作用域变量的“路径”,但运气不佳。我希望最终传递该“路径”以用作正在创建的一些动态表单的 ng-model
。
这是迄今为止我的代码:
my_code.js:
var my_data = {
name: "fred",
number: 1,
children: [
{ name: "bob" },
{ name: "joe" },
{ name: "norman" },
]
};
function get_path(obj, target, path) {
if (typeof path === "undefined" || path === null) {
path = "my_data";
}
for (var key in obj) {
var value = obj[key];
var value_type = value.constructor;
/* value can either be an Array */
if (value_type === Array) {
for (var i=0; i<value.length; i++) {
if (value[i] === target) {
return path + "." + key + "[" + i + "]";
}
var result = get_path(value, target, path + "." + key + "[" + i + "]");
if (result) {
return result;
}
}
}
/* or an Object (dictionary) itself */
else if (value_type === Object) {
var result = get_path(value, target, path + "." + key);
if (result) {
return result;
}
}
/* or something atomic (string, number, etc.) */
else {
if (value === target) {
return path + "." + key;
}
}
}
return false;
}
如果我将对象 my_data.children[0].name
传递给此函数,我希望它返回字符串 "my_data.children[0].name”。但它实际上返回“my_data.children[0].0.name”。关于我哪里出错了有什么想法吗?
附注- 我最初的想法来自Javascript/JSON get path to given subnode? ,但它不能处理数组。
最佳答案
我认为您的错误在于:
else if (value_type === Object) {
var result = get_path(value, target, path + "." + key);
if (result) {
return result;
}
}
您已添加“。” + 键。只需将其删除,如下所示:
else if (value_type === Object) {
var result = get_path(value, target, path );
if (result) {
return result;
}
}
关于javascript - 在 JavaScript 中获取 JSON 对象的 "path",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36212134/