我正在尝试获取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”。关于我哪里出错的任何想法?
P.S。 - 我从Javascript/JSON get path to given subnode?得到了最初的想法,但是没有处理数组。
答案 0 :(得分:3)
我认为您的错误发生在:
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;
}
}
答案 1 :(得分:0)
if (value === target) {
return path + "." + key;
}
在每个if块之后,以防万一我尝试匹配整个数组(与my_data.children
一样)或整个对象不属于一个数组。