2017-02-13 13 views
0

JavaScriptは再帰を使用しようとしていますが、理解するためには援助が必要です。複数レベルのJSONを再帰でソートして解析する

私は "のサブカテゴリ"

var STORE_CATEGORIES = [{ 
     "Id":"1", 
     "Name":"One Parent", 
     "Sort":"0", 
     "Subcategories":[ 
      "Id":"1", 
      "Name":"One Subcategory", 
      "Sort":"0", 
      "Subcategories":[{ 
       "Id":"1", 
       "Name":"One SubSubcategory", 
       "Sort":"0", 
       "Subcategories":[{ 
        ..... 
       }] 
      }] 
     ]}, 
     "Id":"2", 
     "Name":"Two Parent", 
     "Sort":"1", 
     .... 
    ]} 

と、これは私のスクリプトで、今までのマルチレベルでこのJSONを持っている:私は今

sortJSON(STORE_CATEGORIES, $('.categories div'), 'Sort', true); 

:コールする

function sortJSON(json, output, prop, asc){ 
    json = json.sort(function(a, b){ 
     if(asc){ 
      return (a[prop] > b[prop]) ? 1 : ((a[prop] < b[prop]) ? -1 : 0); 
     } else { 
      return (b[prop] > a[prop]) ? 1 : ((b[prop] < a[prop]) ? -1 : 0); 
     } 
    }); 
    showJsonResults(json, output); 
} 
function showJsonResults(json, output){ 
    var parent = output; 
    var list = $('<ul />').appendTo(parent); 
    var html = ''; 
    for (var i = 0; i < json.length; i++) { 
     var result = json[i]; 
     html += '<li data-sort="'+result.Sort+'" data-id="'+result.Id+'"'; 
     if(result.Visible == false){ 
      html += ' class="hide"'; 
     } 
     html += '><a href="'+result.URL+'">'+result.Name+'</a>'; 
     if(result.Subcategories){ 
      html += '<ul>'; 
      for (key in result.Subcategories) { 
       var sub = result.Subcategories[key]; 
       html += '<li data-sort="'+sub.Sort+'" data-id="'+sub.Id+'"'; 
       if(sub.Visible == false){ 
        html += ' class="hide"'; 
       } 
       html += '><a href="'+sub.URL+'">'+sub.Name+'</a>'; 
       html += '</li>'; 
      } 
      html += '</ul>'; 
     } 
     html += '</li>'; 
    } 
    list.append(html); 
} 

機能カテゴリ+サブカテゴリのみを取得していますが、サブカテゴリのサブカテゴリはさらにあります。

ここで再帰を使用するにはどうすればよいですか?おかげさまで

+0

あなたの目標は何ですか? – AshBringer

+0

は、すべてのサブカテゴリを取得するために再帰を使用する必要があります。サブカテゴリのサブカテゴリも表示する必要があります。 – Adrian

答えて

1

あなたは少しあなたの機能を変更する必要があります。

function sortJSON(json, output, prop, asc){ 
     json = json.sort(function(a, b){ 
      if(asc){ 
       return (a[prop] > b[prop]) ? 1 : ((a[prop] < b[prop]) ? -1 : 0); 
      } else { 
       return (b[prop] > a[prop]) ? 1 : ((b[prop] < a[prop]) ? -1 : 0); 
      } 
     }); 
     var parent = output; 
     var list = $('<ul />').appendTo(parent); 
     var html = showJsonResults(json); 
     list.append(html); 
    } 
function showJsonResults(json) { 
    var html = ''; 
    $.each(json, function(i, result) { 
    html += '<li data-sort="' + result.Sort + '" data-id="' + result.Id + '"'; 
    if (result.Visible == false) { 
     html += ' class="hide"'; 
    } 
    html += '><a href="' + result.URL + '">' + result.Name + '</a>'; 
    if (result.Subcategories.length) { //if you have subcategories call the function again 
     console.log(result.Subcategories[0].Name); 
     html += '<ul>' + showJsonResults(result.Subcategories) + '</ul>'; 
    } 

    html += '</li>'; 
    }); 
    return html 
} 
} 

デモ:https://jsfiddle.net/neLbgp4r/1/

+0

は機能しません。何とか再作成する必要があると思います。 – Adrian

+0

どういう意味ですか? – madalinivascu

+0

他のサブカテゴリはありません..もしかしなければ 'if'は同じ結果です – Adrian

関連する問題