2017-02-13 4 views
0

Это мой первый раз, когда я пытаюсь использовать рекурсию в javascript, и мне нужна помощь, чтобы понять ее.Сортировка и разбор нескольких уровней JSON с рекурсией

У меня есть этот 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", 
     .... 
    ]} 

и это не мой сценарий до сих пор:

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); 
} 

Функция вызываемая:

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

Теперь я Я получаю только категории + подкатегории, но есть и другие подкатегории подкатегорий.

Как я могу использовать рекурсию здесь? Спасибо.

+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

 Смежные вопросы

  • Нет связанных вопросов^_^