函数式 Javascript 算法不从过滤器返回预期结果

Functional Javascript algorithm not returning the expected result from a filter

本文关键字:返回 结果 过滤器 Javascript 算法 函数      更新时间:2023-09-26

我正在Javascript中练习使用map(),filter()和concatAll()。 我希望下面的代码返回以下内容:

[{
   "id": 70111470,
   "title": "Die Hard",
   "boxart":"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" 
}]

它没有从框艺术中提取 URL,我不确定为什么。运行代码时,我得到以下输出:

[{"id": 70111470,"title": "Die Hard"}]
function() {
    var movieLists = [
        {
            name: "Instant Queue",
            videos : [
                {
                    "id": 70111470,
                    "title": "Die Hard",
                    "boxarts": [
                        { width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" },
                        { width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" }
                    ],
                    "url": "http://api.netflix.com/catalog/titles/movies/70111470",
                    "rating": 4.0,
                    "bookmark": []
                }
             ]
          }
        ];
    getBoxart = function(boxart){
        return boxart.width==150;
    };
    getVideoData = function(video){return {id: video.id, 
                                        title: video.title, 
                                       boxart: video.boxarts.filter(getBoxart).url}
    };
    getVideos = function(movie){return movie.videos.map(getVideoData)}
    return movieLists.map(getVideos).concatAll();
}

问题是这一行:video.boxarts.filter(getBoxart).url

过滤器返回一个 boxarts 数组(没有 url 属性)

您要么需要在过滤器后映射以返回 URL 数组,要么只需获取第一个 URL

那是因为

video.boxarts.filter(getBoxart)

返回一个数组(如果这是 filter 的本机实现,但也可能用于任何其他实现),然后执行

video.boxarts.filter(getBoxart).url

返回undefined,因为数组没有url属性...

您可能需要执行以下操作:

video.boxarts.filter(getBoxart)[0].url