#jquery #json #jsonp
#jquery — запрос #json #jsonp #jquery
Вопрос:
Я использую themoviedb.org API для извлечения информации о фильмах. Он возвращает эти данные JSON.
Мне нужно отфильтровать это двумя разными способами, но не обязательно в одном и том же обратном вызове. В одном случае мне нужно вернуть только жанры, а в другом случае мне нужно вернуть только «фоновые изображения», где size.toLowerCase() == 'original'
, и оба экземпляра выполняются в success
для вызова ajax, т. Е.:
$.ajax({
url: "http://api.themoviedb.org/2.1/Movie.getInfo/en/json/API_KEY/" filmID,
dataType: "jsonp",
context: document.body,
success: function(data){
...
}
});
Будут ли grep или map подходящим методом для использования здесь? В любом случае, как я могу эффективно получить эту информацию?
Ответ №1:
вы бы использовали grep для фильтрации нужных вам объектов и размещения их в другом массиве, map — для добавления дополнительных объектов в JSON путем выполнения определенной функции для каждого элемента
var results = array();
$.ajax({
url: "http://api.themoviedb.org/2.1/Movie.getInfo/en/json/API_KEY/" filmID,
dataType: "jsonp",
context: document.body,
success: function(data){
data = eval(data);
results = $.grep(data, function(data) {
return data[0].posters.image.size == "original";
});
}
});
Комментарии:
1.
data.posters.size
возвращает пустой массив и изменение его наdata.posters.image.size
выдает следующую ошибку:"TypeError: 'undefined' is not an object (evaluating 'data.posters.image.size')"
2. теперь стало лучше? лол, это просто случай правильного определения индексов, иногда вложенный материал трудно читать!
3. Извините, нет. Для чего
eval
?
Ответ №2:
Звучит как задание для $.map
— если вам нужно вернуть только жанры, $.map
позволит вам создать массив только из этих частей объекта, в то время как $.grep
создаст массив полных объектов фильма.