浅理解 ES6 新增的数组方法Array.of() 和 Array.from()

news2024/10/5 19:14:43

文章目录

  • 📋前言
  • 🎯Array.of() 方法
  • 🎯Array.from() 方法
  • 🎯二者区别
  • 📝最后


在这里插入图片描述

📋前言

在前端开发的面试过程中, ES6 新增是一个很常见的考点,比如说箭头函数、模板字符串、let 和 const 关键字、解构赋值、扩展运算符(…)、类、模块化、生成器、Promise、Map 和 Set 等特性。这篇文章我们一起来浅浅学习和理解下 ES6 新增的数组方法 Array.of()Array.from() ,如二者的区别和用法。


🎯Array.of() 方法

Array.of() 方法会创建一个包含任意数量元素的新数组。它与传统的 Array() 构造函数的区别在于,如果传递的参数是单个数字或字符串,那么 Array() 会将其作为数组的长度来使用,而 Array.of() 总是会将参数作为数组元素来使用。

例如

const arr1 = Array(3); // [undefined, undefined, undefined]
const arr2 = Array.of(1,2,3); // [1,2,3]
const arr3 = Array.of(3); // [3]
const arr4 = Array.of(3, "hello", true); // [3, "hello", true]
console.log(arr1);
console.log(arr2);
console.log(arr3);
console.log(arr4);

在这里插入图片描述
先分别使用 Array()Array.of() 来创建一个数组,Array() 创建了一个包含 3 个 empty 的数组,而 Array.of() 创建了一个包含数字 3 的数组。使用 Array.of() 方法可以避免由于参数个数不同而导致的错误。在实际开发中,可以用来处理参数数量不定的情况,例如处理函数参数。


🎯Array.from() 方法

Array.from 方法用于将一个可迭代对象(比如类数组对象、Set、Map 等)或者一个类数组对象(比如 NodeList、Arguments 等)转换成一个新的数组。它还可以接受一个可选的映射函数,用于对原始的数据进行处理。

例如

const set = new Set([1, 2, 3]);
const arr1 = Array.from(set); // [1, 2, 3]
const map = new Map([["a", 1], ["b", 2], ["c", 3]]);
const arr2 = Array.from(map); // [["a", 1], ["b", 2], ["c", 3]]
const nodeList = document.querySelectorAll('p');
const arr3 = Array.from(nodeList, node => node.textContent); // ['1', '2', '3', '4', '5']
console.log(arr1);
console.log(arr2);
console.log(arr3);

在这里插入图片描述
在这个例子中,使用 Array.from() 方法将 SetMap 还有一个 NodeList 对象转换成了数组,并对 NodeList 中的每个节点进行了映射,以获取其文本内容。

补充
除了上述arr3的操作,还可以这样通过第二个参数映射函数来处理原始数据,如下。

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

在实际开发中,Array.from() 方法可以用来将类数组对象或可迭代对象转换为数组,方便处理数据。例如,在使用 AJAX/Axios 获取数据时,返回的常常是 JSON 字符串或类似数组的对象,我们可以使用 JSON.parse() 将其转换为 JavaScript 对象,然后再使用 Array.from() 将其中的数组转换为 JavaScript 数组进行进一步处理。

除此之外,我们还可以使用Array.from() 方法与 Set 实现数组去重的操作,如下。

const arr =['1','2','3','3','4','4','5']
const newArr=Array.from(new Set(arr))
console.log(newArr); 

在这里插入图片描述


🎯二者区别

1️⃣参数不同

  • Array.of() 接收任意数量的参数,并将它们作为元素创建一个新数组。如果没有参数,它将返回一个空数组。
  • Array.from() 接收两个参数:第一个参数可以是一个类数组对象(比如 NodeList 或 Arguments)或者 iterable 对象(比如 Set、Map 等),第二个参数是一个可选的映射函数,用来对每个元素进行处理。

2️⃣返回值不同

  • Array.of() 总是返回一个包含所有参数的数组,即使只有一个参数。如果参数本身已经是一个数组,它也会被包装在一个新数组中。
  • Array.from() 返回一个新的由可迭代对象或类数组对象中的元素组成的数组。如果提供了映射函数,该函数将应用于每个元素,从而生成新的转换后的值。

📝最后

需要注意的是,Array.of()Array.from() 都是 ES6 中新增的方法,因此在一些较老的浏览器中可能不被支持。如果需要兼容性,可以使用类似 Array.prototype.slice.call 的方式来转换数组。总之,Array.of()Array.from() 这两个方法可以在实际开发中帮助我们更方便地创建和处理数组,提高开发效率。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/446918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宁波汽车运输集团:引入二维码技术,实现车辆精细化管理

宁波市汽车运输集团有限公司是宁波市道路货运业的龙头企业之一,主营全国各地的普通货运以及货物专用运输(集装箱、罐式)。 作为汽车运输集团,车辆的安全问题极其重要。因此,公司设备安全部门要求每个驾驶员在作业之前…

netfilter filter表(二)

这次继续分析filter表,不同与之前的分析方式,这次通过将内核中的数据打印出来,对比结构关系图来分析。这是本次分析涉及的几个数据结构: struct xt_table { struct list_head list; /* What hooks you will enter on */ unsigned …

4、SpringBoot接收和响应xml报文请求

背景 平时开发的接口,基本是使用 json 格式的请求报文。然而,有时候也避免不了有 xml 报文请求的场景,最近就遇到了这种情况,在此记录下。另外,工程中使用的是 controller-service……这种结构。 xml请求报文&#x…

链表(JS实现)

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 链表链表的分类创建链表LinkedList类的骨架 实现链表的方法push尾部添加元…

chatgpt智能提效职场办公-ppt怎么蒙层

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在 PowerPoint 中添加蒙版图层,可以在幻灯片中创建一个半透明的矩形或形状,并在其上方添加或放置其他对象。 下…

FPGA终于可以愉快地写代码了!Vivado和Visual Studio Code黄金搭档

如果你是一位FPGA开发者,那么你一定会对VIvado这款软件非常熟悉。但是,对于vivado兼容的第三方编辑器软件,你知道Visual Studio Code吗?这是个非常不错的选择,Visual Studio Code搭配众多插件,能让你FPGA开…

【SpringBoot】一:SpringBoot的基础(下)

文章目录 1.外部化的配置1.1 配置文件基础1.1.1 配置文件格式1.1.2 application文件1.1.3 application.properties1.1.4 application.yml1.1.5 environment1.1.6 组织多文件1.1.7多环境配置 1.2 绑定Bean1.2.1 简单的属性绑定1.2.2 嵌套Bean1.2.3 扫描注解1.2.4 处理第三方库对…

【移动端网页布局】移动端网页布局基础概念 ② ( 视口 | 布局视口 | 视觉视口 | 理想视口 )

文章目录 一、视口1、布局视口 ( 网页大小 | 网页大小 > 设备大小 )2、视觉视口 ( 设备大小 | 网页大小 > 设备大小 )3、理想视口 ( 网页大小 设备大小 ) 一、视口 浏览器 显示 网页页面内容 的 屏幕区域 被称为 " 视口 " ; 视口分为以下几个大类 : 布局视口…

项目协同中的git

在远程代码仓库(云效,gitee,github,Coding等)新建一个代码库, 我使用的云效 新建一个develop分支,后续所有人的提交代码都合并到develop分支上面,一般develop分支是用来开发用的&…

尚融宝22-提交借款申请

目录 一、需求介绍 二、图片上传 (一)前端页面 (二)实现图片上传 三、数据字典展示 (一)后端 (二)前端 四、表单信息提交 (一)后端 1、VO对象&…

嵌入式工程师如何快速的阅读datasheet的方法

目录 ▎从项目角度来看datasheet ▎各取所需 ▎最后 Datasheet(数据手册)的快速阅读能力,是每个工程师都应该具备的基本素养。 无论是项目开始阶段的选型还是后续的软硬件设计,到后期的项目调试,经常有工程师对着英…

06-Node.js—模块化

目录 1、介绍1.1 什么是模块化与模块 ?1.2 什么是模块化项目 ?1.3 模块化好处 2、模块暴露数据2.1 模块初体验2.2 暴露数据2.2.1 module.exports value2.2.2 exports.name value 3、导入(引入)模块4、导入模块的基本流程5、CommonJS 规范参考 1、介绍…

使用RabbitMQ的手动接收模式:消息第二次入队Failed to declare queue

问题&#xff1a;在rabbitMQ测试使用手动接收模式时发生 Failed to declare queue错误 : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80…

C++ 命名空间、域、缺省参数、函数重载、引用、auto、内联函数的知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏

绪论 从本章开始我们正式进入到C的内容&#xff0c;对此如果没有学习过C语言的建议先将C语言系统的学习一遍后再来&#xff08;已经更新完在专栏就能看到&#xff09;。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&#…

Linux运维基础

一.vim编辑器 1.编辑器介绍 vi/vim是visual interface的简称,是Linux中最经典的文本编辑器&#xff0c;同图形化界面中的文本编辑器一样&#xff0c;vi是命令行下对文本文件进行编辑的绝佳选择&#xff0c;粗暴理解相当于windows下的记事本。 vim是vi的加强版本,兼容vi的所有…

java版UWB人员定位系统源码,提供位置实时显示、历史轨迹回放、电子围栏、行为分析、智能巡检等功能

运用UWB定位技术开发的人员定位系统源码 文末获取联系&#xff01; 本套系统运用UWB定位技术&#xff0c;开发的高精度人员定位系统&#xff0c;通过独特的射频处理&#xff0c;配合先进的位置算法&#xff0c;可以有效计算复杂环境下的人员与物品的活动信息。 提供位置实时显…

SLAM论文速递【SLAM—— DynaSLAM:动态场景中的跟踪、建图和修复—4.19(1)

论文信息 题目&#xff1a; DynaSLAM:Tracking,Mapping and Inpainting in Dynamic Scenes DynaSLAM:动态场景中的跟踪、映射和修复论文地址&#xff1a; https://arxiv.org/pdf/1806.05620.pdf发表期刊&#xff1a; IEEE Robotics and Automation Letters ( Volume: 3, Issu…

RPC一文精通

基础&#xff1a; http是基于应用层协议&#xff0c;对请求和响应进行规范包装,一次http请求就会进行一次tcp连接和断开连接&#xff0c;属于短链接 udp是异步响应&#xff0c;无需建立连接&#xff0c;就可以发送封装的IP数据包 tcp是基于传输层协议&#xff0c;并规范了三…

Python单向循环链表操作

目录 一、单向循环链表 单向循环链表图 二、单向循环链表的操作 1、判断链表是否为空 2&#xff0c;链表长度 3&#xff0c;遍历整个链表 4&#xff0c;在链表头部添加元素 5、链表尾部添加元素 6&#xff0c;在指定位置插入元素 7&#xff0c;修改指定位置的元素 8&a…

JavaSE 和 Java EE 分别是什么

Java 作为最流行的编程语言受到了许多人的喜爱&#xff0c;其在编程中的地位自不必多说。 对于许多才刚刚入门 Java 的朋友来讲&#xff0c;常常会产生这样的困惑&#xff0c;JavaEE是什么&#xff1f;JavaSE又是什么&#xff1f; Java SE Java SE 是 Java Platform, Standa…