JavaScript:为什么嵌套的reduce函数不能链接?

29

如何上一个级别并将“ id和title”对返回到数组中?在我的reduce函数之后尝试使用map时出现错误。

Array.prototype.mergeAll = function(){
    return [].concat.apply([], this);
};

Array.prototype.flatMap = function(func){
    return this.map(function(item){
        return func(item);
    }).mergeAll();
};

function test() {
    var movieLists = [
        {
            name: "New Releases",
            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": []
                },
                {
                    "id": 654356453,
                    "title": "Bad Boys",
                    "boxarts": [
                        { width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" },
                        { width: 140, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" }

                    ],
                    "url": "http://api.netflix.com/catalog/titles/movies/70111470",
                    "rating": 5.0,
                    "bookmark": [{ id:432534, time:65876586 }]
                }
            ]
        },
        {
            name: "Thrillers",   
            videos: [
                {
                    "id": 65432445,
                    "title": "The Chamber",
                    "boxarts": [
                        { width: 130, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" },
                        { width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" }
                    ],
                    "url": "http://api.netflix.com/catalog/titles/movies/70111470",
                    "rating": 4.0,
                    "bookmark": []
                },
                {
                    "id": 675465,
                    "title": "Fracture",
                    "boxarts": [
                        { width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" },
                        { width: 120, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" },
                        { width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" }
                    ],
                    "url": "http://api.netflix.com/catalog/titles/movies/70111470",
                    "rating": 5.0,
                    "bookmark": [{ id:432534, time:65876586 }]
                }
            ]
        }
    ];


    // Use one or more flatMap, map, and reduce calls to create an array with the following items (order doesn't matter)
    // [
    //     {"id": 675465,"title": "Fracture","boxart":"http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" },
    //     {"id": 65432445,"title": "The Chamber","boxart":"http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" },                
    //     {"id": 654356453,"title": "Bad Boys","boxart":"http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" },
    //     {"id": 70111470,"title": "Die Hard","boxart":"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" }                
    // ];

    return movieLists.flatMap(function(movieList) {
            return movieList.videos.flatMap(function(vids){
                    return vids.boxarts.reduce(function(a,b){
                        if (a.width * a.height < b.width * b.height) return a;
                        else return b;                
                    });
            });
    });
}
test();

//这就是返回的内容...我也想添加更高级别的对象属性。特别是ID和标题。

=> [ { width: 150,
    height: 200,
    url: 'http://cdn-0.nflximg.com/images/2891/DieHard150.jpg' },
  { width: 140,
    height: 200,
    url: 'http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg' },
  { width: 130,
    height: 200,
    url: 'http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg' },
  { width: 120,
    height: 200,
    url: 'http://cdn-0.nflximg.com/images/2891/Fracture120.jpg' } ]
彼得杰布

这是我认为可以使用的版本:

return movieLists.flatMap(function (movieList) {
    return movieList.videos.flatMap(function (vids) {
        return { 
            id: vids.id,
            title: vids.title,
            boxart: vids.boxarts.reduce(function (a, b) {
                if (a.width * a.height < b.width * b.height) return a;
                else return b;
            }).url
        }
    });
});

您可以在内部平面图调用中访问视频信息,因此需要在此处构造具有id和title的自定义返回对象。vids参数重命名video或其他名称可能更清晰我希望这有帮助!让我知道您是否需要任何澄清。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能访问嵌套函数内的变量?

为什么不能为嵌套函数推断类型

JSDoc:为什么我的嵌套对象链接没有(为什么它们不能单击)?

为什么javascript生成的输入不能被javascript on change函数识别?

为什么链接不能包含链接

为什么我的 Javascript 函数不能从 HTML 运行?

为什么 splice 函数在 JavaScript 中不能正常工作?

为什么不能用JavaScript函数覆盖此CSS?

为什么我的HTML按钮不能运行我的JavaScript函数?

为什么 Javascript 函数不能按编码顺序工作?

为什么我不能在带有嵌套函数的函数内声明变量?

为什么Stream#reduce不能隐式接受处理超类型元素的累积函数?

为什么不能在.reduce()函数中将推入的结果返回到累加器?

为什么您可以链接某些JavaScript方法,但不能链接其他方法?

为什么我不能链接到shaderc?

为什么不能链接String.replace?

为什么不能静态链接动态库?

为什么简单的MVC教程未调用我的javascript函数?为什么我也不能调试?

为什么我不能通过 Javascript 在嵌套的 div 中插入 html?

为什么我不能在移动设备上点击链接?问题可能出在 Javascript

在React中,为什么我不能使用嵌套的箭头函数...虽然正常的函数似乎可以正常工作?

为什么嵌套函数不会成为javascript中外部函数的属性?

为什么函数不能返回正确答案?

为什么main函数不能返回负数?

为什么我不能调用子函数?

为什么我不能调用我的函数?

Swift:为什么变异函数不能是静态的

为什么我不能这样编写函数?

为什么 X 不能用作函数?