完全理解array.from

一、数组长度和空位

1、array.from可以把类数组对象或可迭代对象转化为真正的数组,其中数组长度取决于迭代器中的元素数量。


const arr = Array.from({length: 5});
console.log(arr.length); // 5
console.log(arr); // [undefined, undefined, undefined, undefined, undefined]

2、但是需要注意的是,对于一个数组中不存在的元素位置,我们称之为“空位”,它既不是undefined也不是null。使用array.from会把数组的空位转化成undefined。


const arr = [, , ];
console.log(arr.length); // 2
console.log(Array.from(arr)); // [undefined, undefined]

3、在ES6之前,为了避免空位的影响,可以用for循环或array.prototype.map方法得到类似的数组。但是这些方法都无法避免空位的影响,代码执行会出现意外情况。使用array.from可以避免这种问题。

二、映射函数

1、在array.from中,可以添加第二个参数作为映射函数,对转化后得到的新数组进行处理。


const arr = [1, 2, 3, 4];
const newArr = Array.from(arr, x => x * 2);
console.log(newArr); // [2, 4, 6, 8]

2、这个映射函数类似于数组原生方法array.prototype.map的处理方式,但是它将对转化的新数组进行处理,而不会改变原来的数组。

三、迭代器对象

1、array.from还可以接受可迭代对象作为参数,这些对象具有一个迭代器方法,该方法通过for..of循环来获取每个元素。


const str = 'Hello';
console.log(Array.from(str)); // ['H', 'e', 'l', 'l', 'o']

2、除了字符串,DOM节点集合也是可迭代的,我们可以使用array.from将它们转化为真正的数组。


const paragraphs = document.querySelectorAll('p');
const arr = Array.from(paragraphs);
console.log(arr);

3、因此,array.from可以让开发者使用数组原生的方法和属性,对DOM节点集合进行处理。

四、转化函数

1、除了映射函数,array.from还可以接受第三个参数,转化函数。转化函数会在从可迭代对象中读取每个元素后被调用,以确定如何转换为数组元素。


const arr = Array.from({length: 3}, (v, i) => i * 2);
console.log(arr); // [0, 2, 4]

2、这个转化函数的第一个参数是当前元素,第二个参数是当前元素的索引号。在这个例子中,可迭代对象的元素为undefined,但我们使用索引值简单地乘以2转换了每个数组元素。

五、使用具有Symbol.iterator属性的对象

1、array.from还可以接受具有Symbol.iterator属性的对象作为参数,这个属性返回一个迭代器对象。


const obj = {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
}
console.log(Array.from(obj)); // [1, 2, 3]

2、在这个例子中,我们定义了一个带有yield关键字的函数,这个函数返回一个生成器对象。这个生成器对象具有Symbol.iterator属性,因此它是可迭代的。最后我们使用array.from将它转化为真正的数组。

六、总结

1、array.from是一个强大而灵活的方法,可以将类数组对象和可迭代对象转化为真正的数组,同时支持映射函数、转化函数和具有Symbol.iterator属性的对象,增加了开发者的编程灵活性。

2、使用array.from可以更优雅地处理数组和DOM节点集合的相互转化过程,避免了一些之前的问题。

3、尽管ES6已经出现了array.from,但是我们也应该深入理解数组的本质,充分掌握原生方法和属性的使用方式。

原创文章,作者:OHTVY,如若转载,请注明出处:https://www.506064.com/n/372049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
OHTVY的头像OHTVY
上一篇 2025-04-23 18:08
下一篇 2025-04-23 18:08

相关推荐

  • JS Proxy(array)用法介绍

    JS Proxy(array)可以说是ES6中非常重要的一个特性,它可以代理一个数组,监听数据变化并进行拦截、处理。在实际开发中,使用Proxy(array)可以方便地实现数据的监…

    编程 2025-04-29
  • scala Array

    一、Array的概述 Scala中的Array是不可变的,它是长度固定的序列,其中的元素类型相同。因此,Array可以看作是一种特殊的集合,其中的元素必须为同一类型。 要使用Arr…

    编程 2025-04-24
  • array.splice详解

    一、array.splice mdn array.splice是JavaScript中常用的数组方法之一。在MDN(Mozilla Developer Network)上,我们可以…

    编程 2025-04-23
  • Python List转Array

    一、Python List与Array的区别 在Python中,List和Array看起来非常相似,它们都可以存储多个值,并且可以被用来访问和操作这些值。但实际上它们之间存在一些差…

    编程 2025-04-18
  • from tqdm import tqdm的全面解析

    一、 简介 在Python语言中,tqdm库是一个提供进度条、可迭代对象和时间差等功能的库。它能够帮助程序员更加直观地了解代码的运行进度,从而更好地优化代码、提高效率。其中最常用的…

    编程 2025-04-18
  • JavaScript中Array.filter的使用详解

    一、简介 Array.filter是ES6新增的高阶函数,它接收一个回调函数,该函数作用于数组的每一个元素,返回true则保留该元素,返回false则过滤掉该元素,最终返回一个新的…

    编程 2025-02-24
  • Swift Array 完全指南

    一、概述 Swift Array 是一个用于存储有序、相同类型数据的集合。Array 很多时候作为我们日常开发中的必备数据结构。在 Swift 中,拥有强类型系统的 Array 在…

    编程 2025-02-01
  • Python中的from import用法详解

    1、引言 Python是一门开放源代码的高级编程语言,具有普遍的用途和可读性,已经成为全球应用最广泛的编程语言之一。其中,from import语句是Python中常用的语句之一,…

    编程 2025-01-16
  • 如何使用Java的Array方法

    Java中的Array方法是开发者必须掌握的重要基础技能之一。本文将从多个方面进行阐述,包括如何创建和初始化数组、如何对数组进行遍历、如何查找数组中的元素、如何对数组进行排序和过滤…

    编程 2025-01-14
  • 深入了解select 1 from dual

    在Oracle数据库中,我们经常会遇到“select 1 from dual”这样的SQL语句,但不是每个人都能够完全理解它的含义和用法。在这篇文章中,我们将从多个方面来详细阐述它…

    编程 2025-01-09

发表回复

登录后才能评论