美文网首页js的一些方法
JS 函数map、filter、reduce

JS 函数map、filter、reduce

作者: ER_PM | 来源:发表于2019-04-12 00:15 被阅读0次

    我开始以一种截然不同的方式体会痛苦的时刻,我不会感觉沮丧或投不过去,而是把痛苦视为大自然的提醒,告诉我有一些重要的东西需要我去学习。

    What?

    map()filter()reduce(),是处理数组的强大工具,主要使用它们来遍历、过滤、计算数组

    Why?

    不用关心内部实现细节,你将更高效的得到你要的结果,且程序更简洁易懂,虽说是如此,但前提你得先掌握。

    How?(操作)

    map() 从数组中提取数据

    需求:watchList数组中包含了一系列电影信息的对象,需要你从中提取出TitleimdbRating,并返回给rating变量中。

    // 全局变量
    var watchList = [
      {
        "Title": "Inception",
        "Year": "2010",
        "Runtime": "148 min",
        "Released": "16 Jul 2010",
        "Director": "Christopher Nolan",
        "imdbRating": "8.8"
      },
      {
        "Title": "Interstellar",
        "Year": "2014",
        "Released": "07 Nov 2014",
        "Runtime": "169 min",
        "Director": "Christopher Nolan",
        "imdbRating": "8.8"
      },
      {
        "Title": "The Dark Knight",
        "Year": "2008",
        "Released": "18 Jul 2008",
        "Runtime": "152 min",
        "Director": "Christopher Nolan",
        "imdbRating": "9.0"
      },
      {
        "Title": "Batman Begins",
        "Year": "2005",
        "Released": "15 Jun 2005",
        "Runtime": "140 min",
        "Director": "Christopher Nolan",
        "imdbRating": "8.3"
      },
      {
        "Title": "Avatar",
        "Year": "2009",
        "Released": "18 Dec 2009",
        "Runtime": "162 min",
        "Director": "James Cameron",
        "imdbRating": "7.9"
      }
    ]
                     
    let rating = watchList.map(item =>{
      return {title:item.Title,rating:item.imdbRating};
    });
    
    console.log(rating);  
    //打印:[{"title":"Inception","rating":"8.8"},{"title":"Interstellar","rating":"8.6"},{"title":"The Dark Knight","rating":"9.0"},{"title":"Batman Begins","rating":"8.3"},{"title":"Avatar","rating":"7.9"}].
    

    看到它的优点了吗?相信你会喜欢上它的,你不妨可以思考下如果使用for循环来实现会有多麻烦。

    filter() 从数组中过滤数据

    需求:结合filter和map返回一个只包含title和rating属性对象的新数组,并且imdbRating值大于或等于 8.0。

    //还是使用上面watchList的数据
    var filteredList = watchList.map(item =>{
      return {title:item.Title,rating:item.imdbRating};
    }).filter(item => {
      return Number(item.rating) >= 8.0;
    });
     
    console.log(filteredList); 
    //打印:[{"title":"Inception","rating":"8.8"},{"title":"Interstellar","rating":"8.6"},{"title":"The Dark Knight","rating":"9.0"},{"title":"Batman Begins","rating":"8.3"}].
    

    filter()轻而易举的过滤出了我们想要的数据!

    reduce() 从数组中计算数据

    需求:使用reduce方法,从watchList中找出Christopher Nolan导演的电影,并计算它们评分(imdbRating)的平均值。

    //代码实现
    var averageRating = watchList.filter(item =>{
      return item.Director  == "Christopher Nolan";
    }).map(item => {
      return Number(item.imdbRating);
    }).reduce((total, currentValue) => {
      return total + currentValue;
    }) / watchList.filter(item => {
      return item.Director  == "Christopher Nolan";
    }).length;
    
    console.log(averageRating); 
    //打印:8.675
    

    你看到它们的其中强大之处了吗?简单几句代码就实现了复杂需求,三者结合更是威力无穷,赶紧在你的项目里使用它们吧。

    相关文章

      网友评论

        本文标题:JS 函数map、filter、reduce

        本文链接:https://www.haomeiwen.com/subject/yqpfwqtx.html