【发布时间】:2017-09-20 17:04:01
【问题描述】:
我有一个具有以下结构的对象图:
topic
- obj #1
- obj #2
--- attr #2 name
--- attr #2 elements
------obj element #1
---------attr element #1 name
---------attr element #1 comment
---------attr element #1 etc.
------obj element #2
--- attr #2 etc.
- obj #3
它由对象和对象数组组成。我需要获取每个元素,但图表的级别未知数。所以,为了遍历所有元素,需要一个递归循环(我猜?)。
现在我有两个不同的任务:
1.) 第一个比较简单:我想搜索一个属性名(对象的值),不返回真(找到)或假,而是返回对象,我在其中找到了这个值。 (假设只有一个具有确切名称的实例)。
2.) 在最后一级对象(例如“obj element #1”及其属性“name”、“comment”和“etc.”)我想调用另一个方法并通过作为参数的完整路径:在此示例中,路径之一是:
主题 -> obj #2 -> obj 元素 #1。 以及下一个(用于函数的下一次调用):
主题 -> obj #2 -> obj 元素 #2。
所以它需要一个数组来存储递归中的“路径”。这个数组也需要改变,例如到下一个元素时,需要删除路径的最后一个元素并添加新元素(#2)。同样,从递归返回时。
这是我尝试过的(这显然是不对的,也许有些回报是无用的/太多了)。关于1):
function findIdentifier (obj, identifier){
var el=null;
if(typeof obj === 'object'){
if (!Array.isArray(obj)){
for(var key in obj){
if (obj.hasOwnProperty(key)) {
if (key.indexOf(identifier) !== -1 || obj[key] === identifier){
//found right object
el = obj[key];
return el;
}
else el = findIdentifier(obj[Object.keys(obj)[0]],identifier);
}
}
return el;
}
else{
for(var i=0; i<obj.length; i++){
if (obj[i].indexOf(identifier) !== -1 && obj.length>1){
el = obj[i];
return el;
}
else el = findIdentifier(obj[0],identifier);
}
return el;
}
}
return el;
}
我希望你们明白我的意思。我很感激每一个答案!
【问题讨论】:
-
您不能(合理地)搜索 JSON。相反,解析它,然后搜索生成的对象图。 JSON 是一种用于数据交换的文本符号。 (More here.) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。
-
查看this question's answers 并尝试将它们应用于您的问题。如果您在进行更多研究后卡在某个特定点上,searching SO thoroughly 等,请发布一个问题,其中包含您需要在 JavaScript 语法中搜索的结构的有效示例、您解决问题的尝试以及对你被困在哪里了。
-
对不起我的错误!我的意思是一组嵌套对象。不知道 JSON 一词是错误的。到目前为止,我还添加了我的代码
-
添加代码****
标签: javascript arrays object recursion nested