zoukankan      html  css  js  c++  java
  • forEach( ) map( ) for( in ) for ( of )

    ====forEach()和map()遍历

    共同点:

        1.都是循环遍历数组中的每一项。

        2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。

        3.匿名函数中的this都是指Window。

        4.只能遍历数组。

     

    1.forEach()

       没有返回值。

    arr.forEach(function(value,index,array){

      //do something

    })

    参数:value数组中的当前项, index当前项的索引, array原始数组;

    数组中有几项,那么传递进去的匿名回调函数就需要执行几次;

    理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是可以自己通过数组的索引来修改原来的数组;

    var ary = [12,23,24,42,1]; 

    var res = ary.forEach(function (item,index,input) { 

           input[index] = item*10; 

    }) 

    console.log(res);//--> undefined; 

    console.log(ary);//--> 通过数组索引改变了原数组; 

     

    2.map()

    有返回值

    arr.map(function(value,index,array){

      //do something

      return XXX

    })

    参数:value数组中的当前项,index当前项的索引,array原始数组;

    区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);

    var ary = [12,23,24,42,1]; 

    var res = ary.map(function (item,index,input) { 

        return item*10; 

    }) 

    console.log(res);//-->[120,230,240,420,10];  原数组拷贝了一份,并进行了修改

    console.log(ary);//-->[12,23,24,42,1];  原数组并未发生变化

     

    ====for-in   for-of

    -----ES5使用for in 可以遍历数组,遍历的索引为字符串型数字(键名),不能直接进行几何运算,遍历顺序有可能不是按照实际数组的内部顺序,所以for in更适合遍历对象,不要使用for in遍历数组。

    -----ES6中的for of更简单的正确的遍历数组达到我们的期望

    for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

    for of遍历的只是数组内的元素,而不包括数组的原型属性method和索引name

     

     

    let arr = ["a","b"];

    for (a in arr) {

        console.log(a);//1,2

    }

     

    for (a of arr) {

        console.log(a);//a,b

    }

    //把arr改成obj试一下

     

    ====数组的扩展

     

    ====fill()

    fill方法使用给定值,填充一个数组。

    ['a', 'b', 'c'].fill(7)// [7, 7, 7]

    new Array(3).fill(7)// [7, 7, 7]

    fill方法用于空数组的初始化非常方便。数组中已有的元素,会被全部抹去

     

    fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。

    ['a', 'b', 'c'].fill(7, 1, 2)// ['a', 7, 'c']

    上面代码表示,fill方法从1号位开始,向原数组填充7,到2号位之前结束。

     

    ====数组实例的 entries(),keys() 和 values()

    ES6 提供三个新的方法——entries(),keys()和values()——用于遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

    for (let index of ['a', 'b'].keys()) {

      console.log(index);

    }

    // 0

    // 1

     

    for (let elem of ['a', 'b'].values()) {

      console.log(elem);

    }

    // 'a'

    // 'b'

     

    for (let [index, elem] of ['a', 'b'].entries()) {

      console.log(index, elem);

    }

    // 0 "a"

    // 1 "b"

     

    ====数组实例的 includes()

    includes方法返回一个布尔值表示某个数组是否包含给定的值,与字符串的includes方法类似。ES2016 引入了该方法。

    [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(xxx) !== -1) {

      // ...

    }

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

    [NaN].indexOf(NaN)// -1

    includes使用的是不一样的判断算法,就没有这个问题。

    [NaN].includes(NaN)// true

     

     

    ====数组的空位

    数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。

    Array(3) // [, , ,]

    上面代码中,Array(3)返回一个具有3个空位的数组。

     

    注意,空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值,ES5 对空位的处理,很不一致,大多数情况下会忽略空位。ES6 则是明确将空位转为undefined。

     

     

     

     

    你好!如果你有什么更好的建议或意见,请在评论区留言。感谢你的阅读!
  • 相关阅读:
    使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容
    python实现DNA序列字符串转换,互补链,反向链,反向互补链
    PandaSeq安装报错ltld required, install libtool library
    使用MySQL客户端登录Ensemble数据库查询相关信息
    第118天:移动端开发——视口
    第117天:Ajax实现省市区三级联动
    第116天: Ajax运用artTemplate实现菜谱
    第115天:Ajax 中artTemplate模板引擎(一)
    第114天:Ajax跨域请求解决方法(二)
    第113天:Ajax跨域请求解决方法
  • 原文地址:https://www.cnblogs.com/YCxiaoyang/p/7171362.html
Copyright © 2011-2022 走看看