在递归javascript函数的结果中追加父级

在递归javascript函数的结果中追加父级,javascript,arrays,json,search,recursion,Javascript,Arrays,Json,Search,Recursion,如何在结果的(反向)树中获取父级 var json = '[{"title":"Category1","children":[{"title":"sometitle","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory1","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=N

如何在结果的(反向)树中获取父级

var json = '[{"title":"Category1","children":[{"title":"sometitle","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory1","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory2","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]}]},{"title":"Category2","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory1","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory2","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]}]},{"title":"Category3","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory1","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory2","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]}]},{"title":"Category4","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory1","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"Subcategory2","children":[{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"},{"title":"video","url":"http:\/\/www.youtube.com\/watch?v=Nk5_1OZ4DVI","thumb":"*.jpg"}]}]}]';

var result = find('sometitle',json);
console.log(result);

function find(needle, arr){
    var results = [];
    for(var k in arr){
        //recursive case
        if(typeof arr[k] === 'object'){
           results = results.concat(find(needle, arr[k]));
        }

        //base case
        if(arr[k]==needle){
            return arr;
        }
    }

    //base case
    return results;
}
我尝试了以下方法,但这将为我提供10多个**结果(对象)

编辑:

0: Object
thumb: "*.jpg"
title: "sometitle"
url: "http://www.youtube.com/watch?v=Nk5_1OZ4DVI"
当前结果:

0: Object
thumb: "*.jpg"
title: "sometitle"
url: "http://www.youtube.com/watch?v=Nk5_1OZ4DVI"
预期结果: 例如:

   0: Object
     title: "Category1"
      children: Array[1]
        0: Object
谢谢,
Jacob

使用Deviantjs(deviantjs.com)进行的此类查询是微不足道的。这个库使用“search”方法扩展了全局对象JSON。使用此方法,可以使用XPath表达式对JSON结构进行查询

这是下面代码的提琴

如下所示(我缩短了JSON以便于概述):

var数据=[
{
“标题”:“类别1”,
“儿童”:[
{“标题”:“视频1”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{
“标题”:“子类别1”,
“儿童”:[
{“标题”:“视频2”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频3”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频4”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”}
]
},
{“标题”:“视频5”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{
“标题”:“子类别2”,
“儿童”:[
{“标题”:“视频5”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频6”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频7”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”}
]
}
]
},
{
“标题”:“类别3”,
“儿童”:[
{“标题”:“视频8”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{
“标题”:“子类别1”,
“儿童”:[
{“标题”:“视频9”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频10”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频11”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”}
]
},
{“标题”:“视频12”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{
“标题”:“子类别2”,
“儿童”:[
{“标题”:“视频13”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频14”,“url”:”http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”},
{“标题”:“视频15”,“url”:http://www.youtube.com/watch?v=Nk5_1OZ4DVI“,”拇指“:“*.jpg”}
]
}
]
}
],
res1=JSON.search(数据'/*[标题和url]'),
res2=JSON.search(数据,'/*[title=“video 13”]'),
str='';

对于(var i=0;i)您的问题有点不清楚。能否发布1)源数据(
jsonstring
)2)预期结果?为什么要发布
concat
?只需执行
返回查找(指针,arr[k])。另外,使用
for(var i=0;i
在数组中迭代。如果您使用JavaScript对象文字语法声明变量,则无需调用JSON解析器。另外,不要将
用于。。。在阵列的
循环中。同时用
var
声明“结果”!感谢您的编码建议,这是一个很好的实践,我添加了json字符串和预期结果。有点糟糕的符号sry..关于这个
    var data = [
       {
          "title": "Category1",
          "children": [
             { "title": "video 1", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
             {
                "title": "Subcategory1",
                "children": [
                   { "title": "video 2", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 3", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 4", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" }
                ]
             },
             { "title": "video 5", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
             {
                "title": "Subcategory2",
                "children": [
                   { "title": "video 5", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 6", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 7", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" }
                ]
             }
          ]
       },
       {
          "title": "Category3",
          "children": [
             { "title": "video 8", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
             {
                "title": "Subcategory1",
                "children": [
                   { "title": "video 9", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 10", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 11", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" }
                ]
             },
             { "title": "video 12", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
             {
                "title": "Subcategory2",
                "children": [
                   { "title": "video 13", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 14", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" },
                   { "title": "video 15", "url": "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", "thumb": "*.jpg" }
                ]
             }
          ]
       }
    ],
    res1 = JSON.search( data, '//*[title and url]' ),
    res2 = JSON.search( data, '//*[title = "video 13"]' ),
    str = '';

for (var i=0; i<res1.length; i++) {
    str += res1[i].title +'<br/>';
}

document.getElementById('output').innerHTML = str;

console.log( res2[0] );
// {title: "video 13", url: "http://www.youtube.com/watch?v=Nk5_1OZ4DVI", thumb: "*.jpg"}