• Array.from()的作用


    参考:https://blog.csdn.net/qq_27674439/article/details/108793223

    Array.from()就是将一个类数组对象可遍历对象转换成一个真正的数组,也是ES6的新增方法。

    1.什么是类数组对象呢?

    所谓类数组对象,就是具有length属性的对象

    意思就是只要对象值里面存在length属性的对象都可以叫类数据对象

    例如:

    let arrayLike = {
       0: 'tom', 
       1: '65',
       2: '男',
       3: ['jane','john','Mary'],
       'length': 4
    }
    
    let arrayLike = {
        'name': 'tom', 
        'age': '65',
        'sex': '男',
        'friends': ['jane','john','Mary'],
        length: 4
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    总结:1.是对象;2.具有length属性,就是一个类数组

    2.实际转换

    let arrayLike = {
        0: 'tom', 
        1: '65',
        2: '男',
        3: ['jane','john','Mary'],
        'length': 4
    }
    let arr = Array.from(arrayLike)
    console.log(arr) // ['tom','65','男',['jane','john','Mary']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果将上面代码中length属性去掉呢?答案会是一个长度为0的空数组

    如果对象的属性名不再是数字类型的,而是其他字符串型的,会发现结果是长度为4,元素均为undefined的数组

    let arrayLike = {
        'name': 'tom', 
        'age': '65',
        'sex': '男',
        'friends': ['jane','john','Mary'],
        length: 4
    }
    let arr = Array.from(arrayLike)
    console.log(arr)  // [ undefined, undefined, undefined, undefined ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.总结

    由此可见,要将一个类数组对象转换为一个真正的数组,必须具备以下条件:

    1. 该类数组对象必须具有length属性
    2. 该类数组对象的属性名必须为数值型或字符串型的数字

    4.实际转化实例

    (1)将Set结构的数据转换为真正的数组

    let arr = [12,45,97,9797,564,134,45642]
    let set = new Set(arr)
    console.log(Array.from(set))  // [ 12, 45, 97, 9797, 564, 134, 45642 ]
    
    • 1
    • 2
    • 3

    (2)Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组

    let arr = [12,45,97,9797,564,134,45642]
    let set = new Set(arr)
    console.log(Array.from(set, item => item + 1)) // [ 13, 46, 98, 9798, 565, 135, 45643 ]
    
    • 1
    • 2
    • 3

    (3)将字符串转换为数组

    let  str = 'hello world!';
    console.log(Array.from(str)) // ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
    
    • 1
    • 2

    (4)复制数组

    console.log(Array.from([12,45,47,56,213,4654,154]))
    
    • 1

    Array.from会返回一个一模一样的新数组

    但是一定要注意,这只是一个浅拷贝

    5.备注(个人理解):目前只有两种办法可以实现深拷贝。

    (1)递归方案(通过循环一层一层的进行拷贝)
    (2)JSON.parse()方法

  • 相关阅读:
    OpenJDK17-JVM源码阅读-ZGC-并发标记
    MES系统究竟有何独特之处?
    μC/OS-II---进程间通信方式
    电脑入门:路由器测试技术介绍及类型和方法
    神经辐射场 (NeRF) 概念
    5.4 Windows驱动开发:内核通过PEB取进程参数
    【笔试刷题训练】day_14
    SpringBoot静态资源路径问题、拦截器基础配置
    CentOS 7.4安装Nginx 1.14.0
    密钥密码学(三)
  • 原文地址:https://blog.csdn.net/weixin_35773751/article/details/127662683