2015-07-03 2 views
1

Так в данный момент у меня есть массив JSON, который выглядит как этот

"series": [{ 
     "book": 1, 
     "chapter": 1, 
     "title": "Title of this chapter", 
    }, 
    { 
     "book": 1, 
     "chapter": 2, 
     "title": "Title of this chapter", 
    }, 
    { 
     "book": 1, 
     "chapter": 3, 
     "title": "Title of this chapter", 
    }, 
    { 
     "book": 2, 
     "chapter": 1, 
     "title": "Title of this chapter", 
    }, 
    { 
     "book": 2, 
     "chapter": 2, 
     "title": "Title of this chapter", 
    }] 

мне нужно повторить его с JQuery, так что я могу сделать $ .each для каждой книги и внутри этого сделать $ .each для каждой главы.

В настоящее время я сделал $ .each, а затем добавил результаты на страницу, а затем попытался отсортировать ее с помощью внешнего jQuery-плагина, но безрезультатно.

+0

Требуется сортировка объектов в пределах массива «chapter»?, По возрастанию? Что такое ожидаемый результат? Может включать 'js' в вопрос? – guest271314

+0

Если я читаю это правильно: вам не нужен плагин jQuery для сортировки визуализированного DOM. Просто отсортируйте массив перед рендерингом. –

ответ

1

С помощью этого JSON вам нужно создать промежуточный массив книг, чтобы объединить все главы данной книги. Затем, на этой промежуточной структуре (которая теперь является массивом объектов book), вы можете пересечь их и выплюнуть главы.

var json = //your JSON object 
var books = {}; 
$.each(json.series,function(i,book) { 
    if(!books.hasOwnProperty(book.book)) { 
     books[book.book] = []; 
    } 
     books[book.book].push(book); 
}); 

//now that you have each book in it's own array 
$.each(books,function(i,book) { 
    $.each(book,function(i,chapter) { 
     console.log('Book ' + chapter.book + ', Chapter ' + chapter.chapter + ':' + chapter.title); 
    }); 
}); 

Если это вообще возможно, что ваши книги/главы не в порядке, то вам нужно сортировать их в первую очередь. Начиная с вашего оригинального объекта JSON:

json.series.sort(function(a,b) { 
    return a.book-b.book || a.chapter-b.chapter; 
}); 
-1

Попробуйте это:

var json = '{"series":[{"book":"1","chapter":"1","title": "Title of this chapter"},{"book":"2","chapter":"2","title": "Title of this chapter"}]}'; 

    var serieslist = $.parseJSON(json); 
    var series_books = {}; 
    $.each(serieslist.series, function(index,book){ 
     series_books.push(book); 
    }); 

    $.each(series_books,function(i,book) { 
     $.each(book,function(i,chapter) { 
     //do what you need to here ... 
     }); 
    }) 

Надеется, что это помогает, используйте $ .parseJSON чтобы разобрать строку JSON в пригодные для использования объектов, а затем манипулировать ими как угодно.

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