zoukankan      html  css  js  c++  java
  • .map() .filter() .reduce() .includes() .some() .every()的用法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            // What you have
            var officers = [
                {id:1,name:'andy',age:15,weight:60},
                {id:2,name:'sam',age:20,weight:50},
                {id:3,name:'julia',age:15,weight:40},
                {id:4,name:'tom',age:25,weight:30} 
            ]   
            // What you need
            // [1,2,3,4]
    
            // forEach()
            // var officersIds = [];
            // officers.forEach(val => {
            //     console.log(val)
            //     officersIds.push(val.id)
            // })
            // console.log(officersIds)
    
            // map
            const officersIds = officers.map(val=>val.id)
            // console.log(officersIds)
    
            // filter
            const teenager = officers.filter(officers => officers.age < 18)
            console.log(teenager)
            // {id: 1, name: "andy", age: 15, weight: 60}
           // {id: 3, name: "julia", age: 15, weight: 40}
    
            const adult = officers.filter(officers => officers.age > 18)
            console.log(adult) 
            // {id: 2, name: "sam", age: 20, weight: 50}
            // {id: 4, name: "tom", age: 25, weight: 30}
    
            // reduce  可以直观的返回数组里面指定的一个值或者对象
            // 所有职员的体重
            const totalWeight = officers.reduce((param1,param2) => param1+param2.weight,0)
            console.log(totalWeight) //180
        </script>
    </head>
    <body>
    
    </body>
    </html>

    js数组includes()

    Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法属于 ES7 ,但 Babel 转码器已经支持。

    [1, 2, 3].includes(2); // true
     
    [1, 2, 3].includes(4); // false
     
    [1, 2, NaN].includes(NaN); // true

    该方法的第二个参数表示搜索的起始位置,默认为 0 。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为 -4 ,但数组长度为 3 ),则会重置为从 0 开始。

    [1, 2, 3].includes(3, 3); // false
     
    [1, 2, 3].includes(3, -1); // true

    没有该方法之前,我们通常使用数组的indexOf方法,检查是否包含某个值。

    if (arr.indexOf(el) !== -1) {
     
    // ...
     
    }

    indexOf方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于 -1 ,表达起来不够直观。二是,它内部使用严格相当运算符( === )进行判断,这会导致对NaN的误判。

    [NaN].indexOf(NaN)
     
    // -1
     
    includes使用的是不一样的判断算法,就没有这个问题。
     
    [NaN].includes(NaN)
     
    // true

    JS中map()/some()/every()/filter()的区别

    js的Array对象有map、some、every、filter几个方法都能对数组中的每个对象进行处理,但是他们之间的功能又各有差别,所以在记下。

    map():通过指定函数处理数组的每个元素,并返回处理后的数组。

    1 var numbers = [4, 9, 16, 25];
    2  
    3 function myFunction() {
    4      console.log(numbers.map(Math.sqrt));
    5 }

    输出结果为:

    2,3,4,5

    map() 方法会将数组中元素依次传入方法中,并将方法的返回结果组成新数组返回。

    传入的function可以有自己的三个形参,currentValue, index,arr分别代表当前元素,元素索引,元素所属数组对象;其中currentValue是必须的。

    注意:map不会改变原数组,map不会检查空数组

    some():用于检测数组中的元素是否满足指定条件(函数提供)

    var ages = [3, 10, 18, 20];
    
    function checkAdult(age) {
        return age >= 18;
    }
    
    function myFunction() {
        console.log(ages.some(checkAdult));
    }

    写成简单的es6的方式:

            var ages = [3,10,18,20]
            const need = ages.some(age=>age>=18)
            console.log(need) // true

    输出为:true

    some方法会依次执行数组的每个元素;

    • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测
    • 如果没有满足条件的元素,则返回false
    • function形参和map一样

    注意:some不会改变原数组,some不会检查空数组

    every:用于检测数组所有元素是否都符合指定条件(通过函数提供)

    var ages = [32, 33, 16, 40];
    
    function checkAdult(age) {
        return age >= 18;
    }
    
    function myFunction() {
        console.log(ages.every(checkAdult));
    }

    写成简单的es6方式:

            var ages = [3,10,18,20]
            const need2 = ages.every(age=>age>=18)
            console.log(need2)// false

    输出结果:false

    every和some正好相反:

    • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
    • 如果所有元素都满足条件,则返回 true。
    • function形参同上

    注意:some不会改变原数组,some不会检查空数组

     

    filter:创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素

    var ages = [32, 33, 16, 40];
    
    function checkAdult(age) {
        return age >= 18;
    }
    
    function myFunction() {
        console.log(ages.filter(checkAdult));
    }

     写成简单的es6形式:

            var ages = [3,10,18,20]
            const need2 = ages.filter(age=>age>=18)
            console.log(need2)// [18,20]

    filter会根据函数中的筛选条件将返回的结果组成一个新的数组并返回

    活到老,学到老。 踏实+激情+坚持
  • 相关阅读:
    MongoDB创建索引
    mongodb基本指令与高级查询指令以及聚合命令
    数据挖掘流程
    Python魔法方法__getattr__、__setattr__、__getattribute__的介绍
    Python中property描述器的使用
    Python类的构造方法及继承问题
    Python3将字节类型的Unicode码转换为文字
    自定义Django Admin后台管理界面的名称
    Django Admin在search_fields包含外键字段
    Python 3与Python 2中模块导入操作的区别
  • 原文地址:https://www.cnblogs.com/andyZhang0511/p/12035316.html
Copyright © 2011-2022 走看看