• 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()方法

  • 相关阅读:
    人生的B计划:构建“一个人”的商业模式
    搭建Typecho个人博客
    散热问题在DC电源模块设计中的重要性和解决方法
    计算机死机的时候,它在干什么?
    【毕业设计】基于单片机的智能手环 -计步器 嵌入式 物联网 stm32
    Jetson Nano 部署(3):TensorRT介绍
    Games104现代游戏引擎入门-lecture12游戏引擎的粒子和声效系统
    【Python】pyecharts 数据可视化模块
    当AI“卡壳”在生产环境:MCP Server 如何帮我们破局
    weapp源码反编译步骤
  • 原文地址:https://blog.csdn.net/weixin_35773751/article/details/127662683