【问题标题】:Filtering to specific nodes in JSON - use grep or map?过滤到 JSON 中的特定节点 - 使用 grep 还是 map?
【发布时间】:2025-11-25 08:35:01
【问题描述】:

我正在使用 themoviedb.org 的 API 来检索有关电影的信息。它正在返回this JSON data

我需要以两种不同的方式过滤它,但不一定在同一个回调中。在一种情况下,我只需要返回流派,而在另一种情况下,我需要返回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 是在这里使用的正确方法吗?无论如何,我怎样才能有效地检索这些信息?

【问题讨论】:

    标签: jquery json jsonp


    【解决方案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";
            });
        }
    });
    

    【讨论】:

    • data.posters.size 返回一个空数组,并将其更改为 data.posters.image.size 会引发以下错误:"TypeError: 'undefined' is not an object (evaluating 'data.posters.image.size')"
    • 现在好点了吗?大声笑,这只是让索引正确的情况,有时嵌套的东西很难阅读!
    • 对不起,没有。 eval 是干什么用的?
    【解决方案2】:

    听起来像是 $.map 的工作——如果您只需要返回类型,$.map 将允许您构建一个仅包含对象的这些片段的数组,而 $.grep 将构建一个完整电影的数组对象。

    【讨论】: