2013-07-16 2 views
0

결과에서 (역) 트리에서 부모를 어떻게 얻을 수 있습니까?재귀 자바 스크립트 함수의 결과에 부모 추가

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 개 이상의 ** 결과 (객체)를 제공합니다 시도

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

편집 :

현재 결과 :

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

예상 결과 : 예를 들어 :

0: Object 
    title: "Category1" 
     children: Array[1] 
     0: Object 

감사합니다, DefiantJS와 야곱

+0

귀하의 질문은 약간 불분명하다. 1) 소스 데이터 ('jsonstring') 2) 예상 결과를 게시 할 수 있습니까? – georg

+0

왜 '연결'입니까? 그냥'return find (needle, arr [k]); '를 찾으십시오. 또한 for (var i = 0; i Amberlamps

+1

JavaScript 객체 리터럴 구문을 사용하여 변수를 선언하는 경우 JSON 파서를 호출 할 필요가 없습니다. 또한 배열에 대해 for ... in 루프를 사용하지 마십시오. 또한 "결과"를'var'으로 선언하십시오! – Pointy

답변

0

이러한 쿼리 (defiantjs.com) 사소한 있습니다. 이 lib는 "search"메소드로 전역 객체 JSON을 확장합니다. 이 방법을 사용하면 XPath 표현식을 사용하여 JSON 구조에 대한 쿼리를 만들 수 있습니다. 여기

이 같이
http://jsfiddle.net/hbi99/cPRd9/

아래 코드의 바이올린입니다 (I 개요를 용이하게하기 위해 JSON을 단축 한) :

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"} 
관련 문제