zoukankan      html  css  js  c++  java
  • for in for of foreach及map的区别

    看一个例子

      var arr=[{name:'张三'},{name:'李四'}];
        var obj={name:'张三'};
        for (var i in arr){
            console.log(i); //0 1 数组的下标
        }
        for (var i in obj){
            console.log(i)    //name 对象的key
        }
    
    
        for (var i of arr){
            console.log(i)    //{name:'张三'}   {name:'李四'} 数组的value
        }
        for (var i of obj){
            console.log(i)    //报错  Uncaught TypeError: obj is not iterable  普通对象不能直接使用for of
        }
    for...in   语句用于遍历数组或者对象。其可以中断循环。
    for in   得到对象的key或数组的index,字符串的下标。遍历对象自身的和继承的可枚举的属性, 不能直接获取属性值。其可以中断循环。

    for of 是es6新语法,其和forEach一样,是直接得到value。
    for...of循环:具有 iterator 接口,就可以用for...of循环遍历它的成员(属性值)。for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象、Generator 对象,以及字符串。for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。对于普通的对象,for...of结构不能直接使用,会报错,必须部署了 Iterator 接口后才能使用。其可以中断循环。
     

    forEach: 只能遍历数组,不能中断,没有返回值(或认为返回值是undefined)。

    forEach方法中的function回调有三个参数:
    第一个参数是遍历的数组内容,
    第二个参数是对应的数组索引,
    第三个参数是数组本身

            var arr = [1, 2, 3, 4];
            var sum = 0,
                sum2 = 0;
            var arr2 = arr.forEach(function(value, index, array) {
                console.log(array[index] == value); //打印true 4次
                sum += value;
            });
            arr.forEach(x => sum2 += x);
    
            console.log(sum, sum2); //结果为 10
            console.log(arr2); // undefined  没有返回值

    map: 只能遍历数组,不能中断,返回值是修改后的数组。

    const array = [1, 3, 6, 9];
    const newArray = array.map(function (value) {
      return value + 1;
    });
    console.log(array);       // [1, 3, 6, 9]
    console.log(newArray);  //[2, 4, 7, 10]



  • 相关阅读:
    02 re模块
    24 内置模块re 正则表达式
    pickle 模块
    json模块
    命名元组
    os模块
    24 内置函数 命名元组(namedtuple) ,os ,sys,序列化,pickle,json
    functools
    ccc 音乐播放
    ccc prefab
  • 原文地址:https://www.cnblogs.com/sunmarvell/p/14461274.html
Copyright © 2011-2022 走看看