在javascript中组合filter()和map()方法

时间:2016-02-07 21:53:05

标签: javascript arrays dictionary filter

我一直在使用Github上的study guide,我正在努力解决链过滤和映射以解决问题的问题。所以,我有一个数组,我应该使用这两种方法来选择评级为5.0的视频的ID。这是阵列:

function() {
var newReleases = [
    {
        "id": 70111470,
        "title": "Die Hard",
        "boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 4.0,
        "bookmark": []
    },
    {
        "id": 654356453,
        "title": "Bad Boys",
        "boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 5.0,
        "bookmark": [{ id:432534, time:65876586 }]
    },
    {
        "id": 65432445,
        "title": "The Chamber",
        "boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 4.0,
        "bookmark": []
    },
    {
        "id": 675465,
        "title": "Fracture",
        "boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 5.0,
        "bookmark": [{ id:432534, time:65876586 }]
    }
];

现在我的代码如下:

  newReleases.filter(function(video){
    return video.rating == 5.0;
  }).map (function(video) {
    return { id: video.id } 
  });
}

我的思维过程是我首先调用filter方法并应用测试(video.rating == 5.0)并返回通过测试的元素。然后我使用map方法将一个函数应用于通过测试的元素,以返回我想要的内容,具有5.0评级的视频的ID,通过地图返回" video.id'。现在当我执行时,我收到了这个错误:

  

TypeError:' undefined'不是一个对象(评估' videoids.sortBy')

这个错误代码真的让我失望,因为我没有看到' videoids'数组中的变量并不表示我需要应用.SortBy

所以我要求澄清错误代码。我也尝试了许多不同的时尚代码,并没有提出正确的代码,所以我真的很感激我不会做的事情。我对我的代码充满信心的原因是因为我在第5章末尾的 [Eloquent Javascript]中应用了一个非常相似的代码(练习5.2母子年龄差异)。我花了几个小时(比我想承认的更多)坚持这个,我已经浏览了堆栈溢出大约两个小时。我可以轻松按下获取答案按钮,但我担心通过这样做我不会学到任何东西。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

请添加return。否则你undefined返回。

return newReleases.filter(function(video) {
    //...

答案 1 :(得分:0)

你必须做错事,因为这对我有用。请参阅https://jsfiddle.net/887mfh10/1/

var newReleases = [
    {
        "id": 70111470,
        "title": "Die Hard",
        "boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 4.0,
        "bookmark": []
    },
    {
        "id": 654356453,
        "title": "Bad Boys",
        "boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 5.0,
        "bookmark": [{ id:432534, time:65876586 }]
    },
    {
        "id": 65432445,
        "title": "The Chamber",
        "boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 4.0,
        "bookmark": []
    },
    {
        "id": 675465,
        "title": "Fracture",
        "boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg",
        "uri": "http://api.netflix.com/catalog/titles/movies/70111470",
        "rating": 5.0,
        "bookmark": [{ id:432534, time:65876586 }]
    }
];

var ids = newReleases.filter(function(video){
    return video.rating == 5.0;
  }).map (function(video) {
    return { id: video.id } 
  });

alert(JSON.stringify(ids)); // see console