Javascript 基于JSON值获取密钥
我想知道JSON对象中的递归键。例如,JSON对象如下Javascript 基于JSON值获取密钥,javascript,jquery,json,Javascript,Jquery,Json,我想知道JSON对象中的递归键。例如,JSON对象如下 { "Division1" : { "checked": true, "level": 1, "District1-1": { "checked": true, "level": 2, "Area1-1-1": { "checked": true, "
{
"Division1" : {
"checked": true,
"level": 1,
"District1-1": {
"checked": true,
"level": 2,
"Area1-1-1": {
"checked": true,
"level": 3,
"Project1-1-1-1": {
"checked": true,
"level": 4
}
},
"Area1-1-2": {
"checked": true,
"level": 3,
"Project1-1-2-1": {
"checked": true,
"level": 4,
"05": {
"checked": true,
"level": 5
}
}
}
}
}
}
我能够找到Project1-1-1-1,我应该能够在数组中找到并存储Area1-1-1,Distriction1-1,Division1,如何执行递归搜索来存储父/祖父母密钥
我正在使用javascript来实现这一点
当前JS:
var parent = [];
$.test.getObjects = function(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)){ continue; }
if (typeof obj[i] == 'object') {
// console.log(i);
parent.push(i);
objects = objects.concat($.test.getObjects(obj[i], key, val));
}
//if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not)
if (i == key && obj[i] == val || i == key && val == '') { //
objects.push({"parent": parent,"children": obj});
} else if (obj[i] == val && key == ''){
//only add if the object is not already in the array
if (objects.lastIndexOf(obj) == -1){
objects.push({"parent": parent,"children": obj});
}
}
}
return objects;
};
我在修改我以前的答案,所以我要删除它。看起来我根本不明白你的问题: 好了,Javascript数组/字典不存储父关系,所以我认为您可以这样做的唯一方法是从父级开始检查整个树。您应该递归地遵循以下步骤: 1-使用Object.keysvar方法获取子数组 2-如果不是要查找的键,请为每个子项运行递归方法。作为一个参数,您应该传递一个数组,累加在以前的运行中获得的所有以前的键,并添加您即将访问的子项的键 3-如果它是您正在寻找的密钥,只需存储您一直在积累的所谓数组,就可以了 接下来,您应该能够使用几个参数执行一个简单的递归方法:正在检查的数组的当前点,以及可能成为结果的所谓累积数组
我不知道是否有比这更简单的方法。您能添加查找Project1-1-1-1的代码吗?问题是什么?存储父母/祖父母密钥意味着什么?@funkworm我已经更新了question@IvanKuckir我刚才口头提到的是1区1区1区1区1区1区